1

文字列ビルダーを使用してC#コードでアドホック挿入ステートメントを作成しました。

var str = new StringBuilder(string.Empty);
str.Append(" INSERT INTO Table_01 ( ID,");
        str.Append("Comment,");
        str.Append("DateTimeStamp,");
str.Append(" ) VALUES( ");
        str.Append("'" + Guid.NewGuid() + "',");
        str.Append("'" + CaseComment + "',");
        str.Append("CONVERT(DATETIME, '" + DateTime.Now.Year + "/" + DateTime.Now.Month + "/" + DateTime.Now.Day + "',120)");

このコードをSqlParameterに変換しました:-

var str = INSERT INTO Table_01(ID,Comment,DateTimeStamp)     
VALUES(@ID,@Comment,@DateTimeStamp)
using (var cmd = new SqlCommand(str, con))
{
cmd.Parameters.Add(new SqlParameter("@ID", Guid.NewGuid()));
cmd.Parameters.Add(new SqlParameter("@Comment", CaseComment));
cmd.Parameters.Add(new SqlParameter("@DateTimeStamp", ?????));
cmd.ExecuteNonQuery();
}

DateTimeを渡す前に、TSQLの場合と同様に、形式が「 convert(varchar、getdate()、120)-2016-10-23 06:10:55(24h) 」と等しいことを確認する必要があります。TSQL Convert式を使用して@datetimeパラメーターを渡すにはどうすればよいですか?

4

4 に答える 4

1

正直なところ、現在の日付/タイムスタンプをテーブルに挿入する必要があるときはいつでも、クライアントの日付ではなくサーバーの日付を使用するのが好きです。アプリがSQLサーバーと同じボックスで実行されている場合は問題ありませんが、アプリが別のボックスで実行されている場合は、同じタイムゾーンからの一貫した日付を使用することをお勧めします。したがって、datetimeパラメーターを完全に削除し、SQL日付関数GetDate()を次のように使用します。

var str = INSERT INTO Table_01(ID,Comment,DateTimeStamp)     
VALUES(@ID,@Comment,GetDate())
using (var cmd = new SqlCommand(str, con))
{
cmd.Parameters.Add(new SqlParameter("@ID", Guid.NewGuid()));
cmd.Parameters.Add(new SqlParameter("@Comment", CaseComment));
cmd.ExecuteNonQuery();
}
于 2012-08-30T16:08:44.103 に答える
1

Convertクラスを使用できます。このようなことを試してください、

cmd.Parameters.Add(new SqlParameter("@DateTimeStamp", Convert.ToDateTime(DateTime.Now)));

また

cmdItemSearch.Parameters.Add(new SqlParameter("@EndDate", SqlDbType.DateTime)); 
cmdItemSearch.Parameters["@EndDate"].Value = DateTime.Now;
于 2012-08-30T15:20:25.617 に答える
1

DateTimeに文字列形式を使用しないのはなぜですか?

于 2012-08-30T15:22:40.367 に答える
1

データベース列が実際にはであり、パラメータを使用する場合は挿入時に変換する必要がないDateTimeと仮定します。varcharデータベースは日付を文字列としてではなくオフセットとして保存します。インラインSQLを使用するときに変換する必要がある唯一の理由は、DBが文字列を文字列として認識し、DateTime内部で正しく変換できるようにする必要があるためです。これは、パラメーターを使用して回避されます。

(言い換えれば、挿入するだけDateTime.Nowで、文字列に引き裂かないでください)

于 2012-08-30T15:59:08.297 に答える