2012-03-12 39 views
0

我最近已經跳入SQL中的參數化查詢。我現在正在執行查詢時收到有關日期的投訴如何獲得包括參數的完整sql查詢

日曆System.Globalization.GregorianCalendar中不支持該字符串表示的DateTime。

當我查詢我得到的參數化查詢字符串

SELECT * FROM Table WHERE field = @p_param 

我需要什麼,以便調試該得到的是

SELECT * FROM Table WHERE field = "2012-03-12 14:09:00" 

如何在地球上我做到這一點?我懷疑這件事很簡單,但我看不到它!

日期時間參數被添加了以下內容:

sql2.Parameters.Add("@p_UpdateTime", SqlDbType.DateTime).Value = DateTime.Parse(updateTime); 

和正常運行時間正在與

String updateTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ff"); 
+0

什麼是你的命令是什麼樣子? – 2012-03-12 14:13:28

+0

發佈設置查詢的代碼,然後發佈如何打印完整查詢。從它的外觀來看,你可能已經意外地把p_param變量作爲一個字符串包含進去了? – BoredAndroidDeveloper 2012-03-12 14:14:51

+1

重點是:SQL命令是**從不**轉換爲您期望的第二個字符串!帶參數的SQL命令與參數列表一起發送到SQL Server。參數值是**從不**實際上作爲字符串替換爲SQL命令 - 因此您無法獲得該表示 - 它永遠不會存在! – 2012-03-12 14:15:11

回答

-1

我現在已經修好了,我用的是FF爲秒的時候,我需要使用SS

+0

誰曾將此標記爲-1請說明原因!這是導致問題的問題,因爲我最終發現了它:( – Neo 2012-03-13 15:18:18

+0

您應該將此標記爲已接受的答案。 – 2012-04-02 12:57:27

+0

Thansk Martin我認爲我有:S – Neo 2012-04-05 14:36:45

0

設置您可以將參數轉換是這樣的:

CONVERT(VARCHAR(19), @p_param, 120) 

哪裏120是yyyy-mm-dd hh:mi:ss(24h)的轉換碼。

+0

遺憾沒有工作 – Neo 2012-03-12 14:30:15

1

使用SQL Server Profiler(隨所有sql服務器一起提供)。它會顯示發送給SQL服務器的完整命令。

+0

我一直跑到一個查詢來獲取最近跑的查詢,以引導的任何環節爲使用Profiler來得到查詢? – Neo 2012-03-12 14:20:17

+0

我總是去開它,啓動沼澤標準跟蹤,執行程序,直到剛纔的查詢,然後暫停跟蹤。查詢通常是最新的或其中之一。 – 2012-03-12 14:42:35

1

打開Sql Server Profiler並跟蹤對Sql Server執行的操作。關於如何使用該工具,請參閱基本的tutorial

+0

它顯示在工具下的選項j不存在於服務器2005 sql管理中,也不在我的2010版本管理之下 – Neo 2012-03-12 14:23:17

+0

查看[MSDN](http://msdn.microsoft.com/zh-cn/library/ms181091 (v = sql.90).aspx)如何打開它。 – RePierre 2012-03-12 14:30:48

0

它看起來像你發送的字符串值。這是由於DateTime.Format根據當前的線程文化而變化的問題。

傳入參數時嘗試是這樣的:

DateTime dateParam = GetDateParam(); 

_sqlCommand.Parameters.Add(
    new SqlParameter 
    { 
     DbType = DbType.Date, 
     ParameterName = "@p_param", 
     Value = dateParam 
    });