[英]c# string query put null for sql server parameter
我知道這個問題被問過很多次,但是我找不到解決方案
這是我的代碼
string query = @"SELECT *
FROM SMSMessage
WHERE (respondCode IS @respondCode)
and (sentOn > '08/26/2016')
";
//string query = "select * from SMSMessage";
SqlConnection con = new SqlConnection(Utilities.getConnectionString());
SqlCommand cmd = new SqlCommand(query, con);
cmd.Parameters.AddWithValue("@respondCode", DBNull.Value);
我希望responseCode為null,
我收到錯誤消息:
@responseCode附近的語法錯誤
當我這樣做responseCode is NULL
,沒有語法錯誤,但某些原因的查詢沒有帶來任何結果
請幫助
我想你要這個
Where (respondCode = @respondCode or @respondCode is null)
and sentOn > '08/26/2016'
當將值傳遞給@respondCode
參數時,將基於@respondCode
和sentOn > '08/26/2016'
過濾記錄。
當什么都沒有傳遞給@respondCode
參數(即NULL
,將僅基於sentOn > '08/26/2016'
過濾記錄
如史蒂夫(Steve)的評論中所述,如果僅當respondCode
為NULL
時才需要記錄,則不需要該變量,只需在Where
子句中對NULL
條件進行硬編碼即可。
Where respondCode is null
and sentOn > '08/26/2016'
我將直接使用IS NULL而不傳遞任何參數,但是最重要的更改是如何在查詢語句中應用日期常量。
假設您在sql服務器數據庫中使用意大利語語言環境,我將使用
string query = @"SELECT * SMSMessage
WHERE respondCode IS NULL
AND (sentOn > CONVERT(DateTime, '26/08/2016', 105))
相反,我會仔細查看為sendOn條件傳遞的值。 如果此值動態變化,則最好為該值使用參數。 這樣,SQL Server的查詢優化器將能夠構建更好(更快)的執行計划
string query = @"SELECT * SMSMessage
WHERE respondCode IS NULL
AND sentOn > @dateLimit";
SqlConnection con = new SqlConnection(Utilities.getConnectionString());
SqlCommand cmd = new SqlCommand(query, con);
cmd.Parameters.Add("@dateLimit", SqlDbType.DateTime).Value = new DateTime(2016, 8, 26);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.