标签: sqlcommand

您应该重用SqlConnection,SqlDataAdapter和SqlCommand对象吗?

我正在使用以类似于以下代码的布局编写的DAL对象.我简化了很多代码只是为了显示设置.

public class UserDatabase : IDisposable
{
    private SqlDataAdapter UserDbAdapter;
    private SqlCommand UserSelectCommand;
    private SqlCommand UserInsertCommand;
    private SqlCommand UserUpdateCommand;
    private SqlCommand UserDeleteCommand;

    private System.Data.SqlClient.SqlConnection SQLConnection; 

    public UserDatabase()
    {
        this.SQLConnection = new System.Data.SqlClient.SqlConnection(ConnectionString);
        this.UserDbAdapter= new SqlDataAdapter(); 
        this.UserDbAdapter.DeleteCommand = this.UserDeleteCommand;
        this.UserDbAdapter.InsertCommand = this.UserInsertCommand;
        this.UserDbAdapter.SelectCommand = this.UserSelectCommand;
        this.UserDbAdapter.UpdateCommand = this.UserUpdateCommand;
    }

    private bool FillUsers(DataSet UserDataSet, out int numberOfRecords)
    {
        bool success = true;

        numberOfRecords = 0;
        string errorMsg = null;

        this.UserDbAdapter.SelectCommand = this.GetUsersSelectCommand();

        numberOfRecords = UserDbAdapter.Fill(UserDataSet, UsersTableName);

        return success;
    }

    private SqlCommand GetUserSelectCommand() …
Run Code Online (Sandbox Code Playgroud)

c# sqlcommand sqlconnection sqldataadapter

7
推荐指数
1
解决办法
5926
查看次数

我在SQL命令中收到错误未正确结束

当我进入这个

INSERT INTO works_on
(essn, pno, hours)
values
('123456789', 1, 32.5),
('123456789', 2, 7.5),
('666884444', 3, 40.0),
('453453453', 1, 20.0),
('453453453', 2, 20.0),
('333445555', 2, 10.0),
('333445555', 3, 10.0),
('333445555', 10, 10.0),
('333445555', 20, 10.0),
('999887777', 30, 30.0),
('999887777', 10, 10.0),
('987987987', 10, 35.0),
('987987987', 30, 5.0),
('987654321', 30, 20.0),
('987654321', 20, 15.0),
('888665555', 20, 0);
Run Code Online (Sandbox Code Playgroud)

我得到了跟随错误

ORA-00933:SQL命令未正确结束

sql sqlcommand oracle11g

7
推荐指数
1
解决办法
2万
查看次数

如何阻止PowerShell SqlCommand回显参数

我有一些函数使用SqlCommand对象来进行数据插入和查询.但是一个函数(文件中的最后一个函数)似乎将(大部分)属性回显到输出中.有问题的功能:

function Add-DataStudentChangeEvent($person,
        $key,
        $currentValue,
        $newValue,
        $eventType){

    $cmdEvent=New-Object System.Data.SqlClient.SqlCommand
    $cmdEvent.Connection = $conn
    $cmdEvent.CommandTimeout = 600000

    $cmdEvent.CommandText = "INSERT INTO ChangeEvent
            (AttributeKey
            ,CurrentAttributeValue
            ,NewAttributeValue
            ,EventType
            ,EventDate
            ,CompletedStatus
            ,Person_Id)
        VALUES
            (@AttributeKey,
            @CurrentAttributeValue,
            @NewAttributeValue,
            @EventType,
            GETDATE(),
            0,
            @PersonId);" -F

    $cmdEvent.Parameters.AddWithValue("@AttributeKey", $key); 
    $cmdEvent.Parameters.AddWithValue("@CurrentAttributeValue", $current);
    $cmdEvent.Parameters.AddWithValue("@NewAttributeValue", $updateTo);
    $cmdEvent.Parameters.AddWithValue("@EventType", $eventType);
    $cmdEvent.Parameters.AddWithValue("@PersonId", $person);

    $cmdEvent.ExecuteNonQuery()
}
Run Code Online (Sandbox Code Playgroud)

在使用参数化查询的另一个类似函数中,我发现-F在最后添加,停止回声.我确实说过大部分参数.实际上只显示了5个中的4个.这是我得到的输出:

1
CompareInfo                     : None
XmlSchemaCollectionDatabase     : 
XmlSchemaCollectionOwningSchema : 
XmlSchemaCollectionName         : 
ForceColumnEncryption           : False
DbType                          : String
LocaleId                        : 0
ParameterName                   : @CurrentAttributeValue
Precision                       : 0
Scale                           : 0
SqlDbType …
Run Code Online (Sandbox Code Playgroud)

powershell sqlcommand

7
推荐指数
1
解决办法
1745
查看次数

C#SqlDataReader执行统计信息

我正在创建一个自动数据库查询执行队列,这实际上意味着我正在创建一个逐个执行的SQL查询队列.

使用类似于以下的代码执行查询:

using (SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings["NorthwindConnectionString"].ConnectionString))
{
  cn.Open();
  using (SqlCommand cmd = new SqlCommand("SP", cn))
  {
    cmd.CommandType = CommandType.StoredProcedure;
    using (SqlDataReader dr = cmd.ExecuteReader())
    {
      while (dr.Read())
      {

      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

我想做的是尽可能多地收集关于执行的信息.花了多长时间.受影响的行数.

最重要的是,如果它失败了,为什么它失败了.

实际上我可以获得有关我希望能够保存的执行的任何信息.

c# statistics sql-server-2005 sqlcommand sqldatareader

6
推荐指数
1
解决办法
2029
查看次数

从.NET可以获得由SqlCommand对象生成的完整SQL字符串(使用SQL参数)吗?

从.NET环境中,我可以访问由SqlCommand对象生成的完整SQL字符串吗?

注意:在调试模式下,完整的SQL字符串显示在VisualStudio中的Intellisense悬停中.

如果必须,我愿意使用反射技术.我相信这里有人知道如何做到这一点.


更新1:
我正在调用具有参数的存储过程,cmd.CommandType = CommandType.StoredProcedure并且我正在尝试获取生成并运行的完整SQL.我不知道是不是cmd.如果可能将完整字符串存储在状态字段或类似内容中,则Prepare()方法在这种情况下可能不会有用.


更新2:

根据下面的答案(和引用),表明在准备或执行过程中没有内部生成完整的SQL字符串,我做了一些使用.NET Reflector.即使是内部连接类似乎也会传递对象而不是将它们归结为字符串,例如:

内部抽象void AddPreparedCommand(SqlCommand cmd);
声明类型:System.Data.SqlClient.SqlInternalConnection
程序集:System.Data,Version = 2.0.0.0


总的来说,感谢每个人的细节水平,以证明可以做什么,并展示实际发生的事情.非常感激.我喜欢彻底的解释; 他们增加了保证,并为答案提供了信任.

sql-server reflection ado.net sqlcommand

6
推荐指数
2
解决办法
2万
查看次数

C#SQL插入命令

谁能告诉我以下2种插入记录的方式可以创造更好的性能?

情况1

SqlCommand cmd = new SqlCommand();

for (int i = 0; i < 10000; i++)
{
  cmd = new SqlCommand("insert into test(id, name) value('" + i + "', '" + i + "')");
  cmd.ExecuteNonQuery();
}
Run Code Online (Sandbox Code Playgroud)

案例2

string sql = null;

for (int i = 0; i < 10000; i++)
{
  sql += "insert into test(id, name) value('" + i + "', '" + i + "')";
}

SqlCommand cmd = new SqlCommand(sql, conn);
cmd.ExecuteNonQuery();
Run Code Online (Sandbox Code Playgroud)

c# sql loops sqlcommand insert

6
推荐指数
2
解决办法
9万
查看次数

组合两个或多个select语句的输出

如何组合output两个或多个SELECT语句,我有多个表,它们有一些我需要的数据,fetch所以我写了多个SELECT查询.现在我想结合查询结果,这样我还需要做什么?我希望输出为:

t1.qty,t2.qty,t3.qty 
Run Code Online (Sandbox Code Playgroud)

sql select sqlcommand sql-server-2008

6
推荐指数
2
解决办法
6万
查看次数

我应该迁移到实体框架吗?

我一直在使用SqlCommand该类并编写自己的T-SQL查询很长时间了。我坚持使用它是因为我对此感到满意,它可能源于我在拥有许多其他不错选择之前的几天开始从事Windows开发。我从事Web开发大约十年了,至今仍在使用它并编写自己的查询字符串。我已经为我的所有数据库需求动态编写了一个动态类,我所要做的就是编写T-SQL,我可以快速完成该任务并在任何项目中使用。

其他开发人员在看到我的代码时大开眼界,并鼓励我学习一点都不喜欢的LINQ。

我现在正在ASP.NET MVC中开始一个新项目,现在感觉应该摆脱恐龙时代,转到Entity Framework来处理我的数据。

我知道SqlCommand该类是Entity Framework幕后工作的基本要素,所以我觉得为什么我应该通过中间人(实体)来获得相同的结果并花时间学习一些新知识。

有人可以向我解释为什么我需要继续前进,还是我应该坚持我所知道的?

c# entity-framework sqlcommand

6
推荐指数
2
解决办法
1753
查看次数

添加SqlParameter以绑定LIKE'%@ x%'

我在获取以下代码以正确添加SqlCommand参数时遇到问题@vendor.由于某种原因,传递的查询似乎总是:

select TOP 500 * 
from [mike_db].[dbo].[na_pe_sql_import] 
where vendname like '%@vendor%';
Run Code Online (Sandbox Code Playgroud)

如果我像这样设置查询,它可以工作,但我知道这是不好的做法:

string strQuery = "select TOP 500 * from [mike_db].[dbo].[na_pe_sql_import] where vendname like '%"+txt_search.Text.ToString()+"%';";
Run Code Online (Sandbox Code Playgroud)

这是代码:

    protected void Search_Click(object sender, EventArgs e)
    {   
        string search = txt_search.Text.ToString();
        String strConnString = System.Configuration.ConfigurationManager.ConnectionStrings["mike_db"].ConnectionString;

        SqlConnection con = new SqlConnection(strConnString);
        con.Open();

        string strQuery = "select TOP 500 * from [mike_db].[dbo].[na_pe_sql_import] where vendname like '%@vendor%';";

        cmd = new SqlCommand(strQuery, con);
        cmd.Parameters.AddWithValue("vendor", search);

        txt_search.Text = string.Empty;

        DataSet ds = new DataSet();

        da …
Run Code Online (Sandbox Code Playgroud)

c# asp.net parameters sqlcommand

6
推荐指数
1
解决办法
6805
查看次数

sql从表的不同列中选择平均值

在我的桌子上,我有一些这样的柱子,(在另一个柱子旁边)

col1 | col2
s1   |  5
s1   |  5
s2   |  3
s2   |  3
s2   |  3
s3   |  5
s3   |  5
s4   |  7
Run Code Online (Sandbox Code Playgroud)

我想要所有col2 的平均值超过 Distinct col1。(5+3+5+7)/4=5

mysql sql sqlcommand

6
推荐指数
2
解决办法
1万
查看次数