SqlParameter
をどのように設定していますか ? SqlDbType
を設定する必要があります SqlDbType.DateTime
へのプロパティ 次に、DateTime
を渡します パラメータに直接変換します(文字列に変換しないでください。その場合、多くの問題が発生します)。
DBに値を取得できるはずです。そうでない場合は、これを行う方法の非常に簡単な例を次に示します。
static void Main(string[] args)
{
// Create the connection.
using (SqlConnection connection = new SqlConnection(@"Data Source=..."))
{
// Open the connection.
connection.Open();
// Create the command.
using (SqlCommand command = new SqlCommand("xsp_Test", connection))
{
// Set the command type.
command.CommandType = System.Data.CommandType.StoredProcedure;
// Add the parameter.
SqlParameter parameter = command.Parameters.Add("@dt",
System.Data.SqlDbType.DateTime);
// Set the value.
parameter.Value = DateTime.Now;
// Make the call.
command.ExecuteNonQuery();
}
}
}
ここでの問題の一部は、時刻がUTCであるという事実がSQLServerに伝達されていないことを心配していることだと思います。そのためには、SQL Serverは特定の時間帯が特定のロケール/タイムゾーンにあることを認識していないため、そうすべきではありません。
UTC値を保存する場合は、SQL Serverに渡す前にUTCに変換します(サーバーに、DateTime
を生成するクライアントコードと同じタイムゾーンがある場合を除く)。 、そしてそれでも、それはリスクです、IMO)。 SQL Serverはこの値を格納します。値を取得したときに、現地時間で表示する場合は、自分で行う必要があります(DateTime
構造体は簡単に実行できます)。
とはいえ、変換を実行してから、変換されたUTC日付(ToUniversalTime
を呼び出して取得した日付)を渡すと、 メソッド(文字列に変換するのではなく)をストアドプロシージャに変換します。
そして、値を取り戻したら、ToLocalTime
を呼び出します ローカルタイムゾーンで時間を取得する方法。