[英]How to pass datetime from c# to sql correctly?
我有一個表格,其中的日期時間采用以下格式:
2011-07-01 15:17:33.357
當我在 object 上執行 a.ToString() 時,我正在使用 c# DateTime,我得到的 DateTime 格式為:
04/07/2011 06:06:17
我想知道如何正確傳遞正確的 DateTime,因為當我運行代碼中的 SQL 時它不起作用(即 select 是正確的 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'
一個返回 53 條記錄,另一個返回 69 條記錄。 怎么會這樣? 當我將 DateTime (04/07/2011 07:19:58) 從 c# 傳遞到 SQL 時,根本沒有任何記錄出現!
您已經通過使用帶有DateTime
值的DateTime
參數正確地完成了它,所以它應該已經工作了。 忘記ToString()
- 因為這里沒有使用它。
如果存在差異,則很可能與兩個環境之間的精度不同有關; 也許選擇一個舍入(秒,也許?)並使用它。 還要記住 UTC/local/unknown(數據庫沒有日期“種類”的概念;.NET 有)。
我有一張表,其中的日期時間格式為:
2011-07-01 15:17:33.357
請注意,數據庫中的日期時間不是任何這樣的格式; 那只是您的查詢客戶端向您展示善意的謊言。 它存儲為一個數字(甚至這是一個實現細節),因為人類有這種奇怪的傾向,沒有意識到您顯示的日期與40723.6371916281
相同。 愚蠢的人類。 通過將其簡單地視為“日期時間”,您應該不會遇到任何問題。
我遇到了很多涉及 C# 和 SqlServer 的問題。 我最終做了以下事情:
還要確保您的所有機器都在同一時區運行。
關於您獲得的不同結果集,您的第一個示例是“July First” ,而第二個示例是“7th of July” ...
此外,第二個示例也可以解釋為“4 月 7 日”,這取決於您的服務器本地化配置(我的解決方案不會遇到此問題)。
編輯: hh 被 HH 取代,因為它似乎沒有在具有 AM/PM 的系統上捕獲正確的時間,而不是具有 24 小時時鍾的系統。 請參閱下面的評論。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.