创建新的SQLCommand或重用相同的SQLCommand

Nes*_*tor 13 .net sql-server ado.net

我需要使用ADO.NET向SQL 2008发送一个命令列表,一个接一个地执行.我应该为我发送的每个SQL创建一个新的SQLCommand吗?或者重用相同的SQLCommand并只更改CommandText属性?谢谢,内斯特

Joh*_*zen 17

SqlCommands非常轻量级.你每次都可以安全地创建一个新的.

参数化命令存在复杂性,您需要清除和重置所有参数,此时,创建新命令是干净,易于理解和有效的.

另外,每次使用新的SqlConnection通常都可以.自动的内置连接池是使其高效的"神奇".

我用这个:

public void ExecuteQuery(string query)
{
    this.ExecuteQuery(query, null);
}

public void ExecuteQuery(string query, Dictionary<string, object> parameters)
{
    using (SqlConnection conn = new SqlConnection(this.connectionString))
    {
        conn.Open();

        using (SqlCommand cmd = conn.CreateCommand())
        {
            cmd.CommandText = query;

            if (parameters != null)
            {
                foreach (string parameter in parameters.Keys)
                {
                    cmd.Parameters.AddWithValue(parameter, parameters[parameter]);
                }
            }

            cmd.ExecuteNonQuery();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 这不是"通常没问题".自从TransactionScope推出以来,只是在互联网上搜索人们出现DTC促销意外被咬的次数.通常的建议是每个事务/工作单元重用一个连接. (3认同)
  • 关注关闭和重新打开连接的建议.在TransactionScope中执行此操作将立即将其提升为DTC事务,如果不需要则会损害性能,如果未正确配置DTC,则可能会引入错误. (2认同)