2012-04-25 12 views
0

私はクエリを実行するときにブロックを使用しないことを覚えていますが、私は今はロックテーブルに問題があります。SQLコマンドの文を使用

しかし、次のコードを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; 
+10

あなたはそれを試して何が起こるかを見てみませんか?あなたが問題を抱えているなら、戻ってきて尋ねることができます! – Nick

+0

テーブルをロックすることは、 'ExecuteScalar'を使用しているので特に' using'ステートメントとはあまり関係がありません。 –

+0

コマンドまたはコネクションを破棄すると、[テーブルのロック](http:// blogs。 msdn.com/b/joesack/archive/2009/05/22/troubleshooting-table-locks.aspx)。 –

答えて

2

あなたははかなりそのようにそれを行うにはを持っていない - あなたはdapperのようなものを使用することができます

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

ジョブ完了;すべてうまく処分され、パラメータが混乱することはなく、日時を文字列として渡すのは間違いではありません(datetimeとして渡す必要があります)。

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; 
関連する問題