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

私は次のことをしなければなりませんか?

はい。

より長い答え:

はい、次のことを行う必要があります。

さらに長いです:

はい、次のことを行う必要があります。

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 に答える
2

あなたはそれをそのように行う必要はありません-あなたはdapperのようなものを使うことができます:

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

仕事は終わりました。すべてが適切に処理され、パラメーターをいじることはなく、日時を文字列として渡すという間違いを犯しません(日時として渡す必要があります)。

于 2012-04-25T10:12:14.650 に答える