簡體   English   中英

C#字符串查詢為SQL Server參數放空

[英]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參數時,將基於@respondCodesentOn > '08/26/2016'過濾記錄。

當什么都沒有傳遞給@respondCode參數(即NULL ,將僅基於sentOn > '08/26/2016'過濾記錄

如史蒂夫(Steve)的評論中所述,如果僅當respondCodeNULL時才需要記錄,則不需要該變量,只需在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))

T-SQL轉換文檔

相反,我會仔細查看為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.

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