0

我在执行查询时没有使用块的时间比我记得的要长,但是我现在遇到了锁定表的问题,而且看起来查询没有正确处理。

但是我需要将以下代码重新写入 using 块。

sql = conn.CreateCommand();
sql.CommandText = query;
sql.Parameters.Add("@p_DateFrom", SqlDbType.VarChar).Value = datefrom.ToString("yyyy-MM-dd");
sql.CommandType = CommandType.Text;

int rowCount = (Int32)sql.ExecuteScalar();
sql.Parameters.Clear();
sql.Dispose();
return rowCount;

我将如何去重写这个。我是否必须执行以下操作:

int rowCount = 0;
using (sql = conn.CreateCommand())
{
    sql.CommandText = query;
    sql.Parameters.Add("@p_DateFrom", SqlDbType.VarChar).Value = datefrom.ToString("yyyy-MM-dd");
    sql.CommandType = CommandType.Text;
    rowCount = (Int32)sql.ExecuteScalar();
}           
return rowCount;
4

2 回答 2

2

你不必那样——你可以使用像dapper这样的东西:

int rowCount = conn.Query<int>(query, new {p_DateFrom = datefrom}).Single();

任务完成; 一切都很好,没有弄乱参数,并且不会犯将日期时间作为字符串传递的错误(它应该作为日期时间传递)。

于 2012-04-25T10:12:14.650 回答
2

我是否必须执行以下操作:

是的。

更长的答案:

是的,您必须执行以下操作。

甚至更长:

是的,您必须执行以下操作:

int rowCount = 0;
using (sql = conn.CreateCommand())
{
    sql.CommandText = query;
    sql.Parameters.Add("@p_DateFrom", SqlDbType.VarChar).Value = datefrom.ToString("yyyy-MM-dd");
    sql.CommandType = CommandType.Text;
    rowCount = (Int32)sql.ExecuteScalar();
}           
return rowCount;
于 2012-04-25T10:06:22.633 回答