簡體   English   中英

如何正確地將日期時間從 c# 傳遞到 sql?

[英]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 的問題。 我最終做了以下事情:

  1. 在 SQL 服務器上,我使用 DateTime 列類型
  2. 在 c# 我使用 .ToString("yyyy-MM-dd HH:mm:ss") 方法

還要確保您的所有機器都在同一時區運行。

關於您獲得的不同結果集,您的第一個示例是“July First” ,而第二個示例是“7th of July” ...

此外,第二個示例也可以解釋為“4 月 7 日”,這取決於您的服務器本地化配置(我的解決方案不會遇到此問題)。

編輯: hh 被 HH 取代,因為它似乎沒有在具有 AM/PM 的系統上捕獲正確的時間,而不是具有 24 小時時鍾的系統。 請參閱下面的評論。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM