テーブルがあり、その中の日時は次の形式です。
2011-07-01 15:17:33.357
オブジェクトで.ToString()を実行するときにc#DateTimeを取得しています。次の形式でDateTimeを取得しています。
04/07/2011 06:06:17
私たちのコードにあるSQLを実行すると動作しない(つまり、正しいDateTimeを選択する)ので、正しいDateTimeを正しく渡す方法を疑問に思っています。 SQLプロファイラーを使用できません。
これはコードです:
//looks to if a user has had any activity in within the last time specified
public bool IsUserActivitySinceSuppliedTime(int userId, DateTime since)
{
//get everything since the datetime specified [usually 5 hours as this is
//how long the session lasts for
string sql = "SELECT * FROM tbl_webLogging WHERE userid = @userid AND DateAdded > @sinceDateTime";
SqlParameter sinceDateTimeParam = new SqlParameter("@sinceDateTime", SqlDbType.DateTime);
sinceDateTimeParam.Value = since;
SqlCommand command = new SqlCommand(sql);
command.Parameters.AddWithValue("@userid", userId);
command.Parameters.Add(sinceDateTimeParam);
using (SqlDataReader DataReader = GetDataReader(command))
{
if (DataReader.HasRows)
{
return true;
}
else
{
return false;
}
}
}
更新*******************
データに対して次を実行しました。
SELECT * FROM tbl_webLogging
WHERE userid = 1
AND DateAdded > '2011-07-01 07:19:58.000'
そして
SELECT * FROM tbl_webLogging
WHERE userid = 1
AND DateAdded > '04/07/2011 07:19:58'
1つは53レコードを返し、もう1つは69レコードを返します。どうすればいいの?そして、DateTime(04/07/2011 07:19:58)をc#からSQLに渡すと、レコードがまったく表示されません!
DateTime
の値を持つDateTime
パラメーターを使用することにより、既に正しく実行されているため、shouldすでに機能しています。 ToString()
を忘れてください-ここでは使用されていないので。
違いがある場合は、2つの環境間で精度が異なる可能性が最も高くなります。多分丸め(秒、多分?)を選択して使用します。 UTC/local/unknown(DBには日付の「種類」の概念はありませんが、.NETにはあります)にも留意してください。
テーブルがあり、その中の日時は次の形式です:
2011-07-01 15:17:33.357
データベース内の日時は、そのような形式ではないことに注意してください。それはあなたの白い嘘を見せているクエリクライアントです。それはnumberとして保存されます(そしてそれは実装の詳細でもあります)。なぜなら、人間はあなたが示した日付40723.6371916281
と同じです。愚かな人間。全体を通して単に「日付時刻」として扱うことにより、問題が発生することはありません。
C#とSqlServerに関連する多くの問題がありました。私は次のことをしました:
また、すべてのマシンが同じタイムゾーンで実行されるようにしてください。
取得するさまざまな結果セットに関して、最初の例は"July First"で、2番目は"7月4日"です。
また、2番目の例は「4月7日」と解釈することもできます。これはサーバーのローカリゼーション構成に依存します(私のソリューションはこの問題の影響を受けません)。
編集:hhはHHに置き換えられました。24時間制のシステムとは対照的に、AM/PMのシステムでは正しい時間をキャプチャできないようです。以下のコメントを参照してください。