2012-04-25 75 views
0

我有时间比我可以做查询时使用块切记不要使用,但是我现在有一个问题带有锁定表和它看起来像查询不处置properley。using语句SQL命令

但是我需要重新写下面的代码到一个使用块。

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; 
+10

你为什么不试试看看会发生什么?那么如果你有问题,你可以回来问问! – Nick 2012-04-25 10:05:21

+0

锁定表并没有真正得到很多事要做'using'陈述,特别是因为你正在使用'ExecuteScalar' – 2012-04-25 10:10:06

+0

处置命令或连接有*不*做[表锁](HTTP://博客。 msdn.com/b/joesack/archive/2009/05/22/troubleshooting-table-locks.aspx)。 – 2012-04-25 10:11:43

回答

2

你不这样做完全是这样 - 你可以使用类似dapper

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

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

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;