1
我正在嘗試使用查詢來從表中使用一個 - 三個參數選擇所有內容;Command.Parameters [「@ name」]。Value正確的語法
SELECT * FROM PlantAreaCodes
WHERE (@AreaCode IS NULL OR AreaCode = @AreaCode)
AND (@AreaName IS NULL OR AreaName LIKE @AreaName)
AND (@Comments IS NULL OR Comments LIKE @Comments);
這裏是我的查詢的C#代碼:
mySqlCommand = mySqlConnect.CreateCommand();
mySqlCommand.CommandText = "SELECT * FROM PlantAreaCodes WHERE (@AreaCode IS NULL OR AreaCode = @AreaCode) AND (@AreaName IS NULL OR AreaName LIKE @AreaName) AND (@Comments IS NULL OR Comments LIKE @Comments);";
mySqlCommand.Parameters.Add("@AreaCode", MySqlDbType.Int32);
mySqlCommand.Parameters.Add("@AreaName", MySqlDbType.VarChar);
mySqlCommand.Parameters.Add("@Comments", MySqlDbType.Text);
mySqlCommand.Parameters["@AreaCode"].Value = (string.IsNullOrEmpty(Convert.ToString(PModel.AreaCode)) ? (object)DBNull.Value : PModel.AreaCode);
mySqlCommand.Parameters["@AreaName"].Value = (string.IsNullOrEmpty(PModel.AreaName) ? (object)DBNull.Value : PModel.AreaName);
mySqlCommand.Parameters["@Comments"].Value = (string.IsNullOrEmpty(PModel.Comments) ? (object)DBNull.Value : PModel.Comments);
mySqlReader = mySqlCommand.ExecuteReader();
該查詢允許用戶搜索一個,兩個,三個或沒有拋出任何錯誤的字段,但它僅適用於可爲空的類型。 Therefpre自PModel.AreaCode
是int
,搜索使用0
而不是null
。即。
SELECT * FROM PlantAreaCodes
WHERE (NULL IS NULL OR AreaCode = NULL)
AND (NULL IS NULL OR AreaName LIKE NULL)
AND (NULL IS NULL OR Comments LIKE NULL);
由於AreaCode = 0
是一個有效的查詢,它將不返回任何字段。
我試過讓AreaCode
可以通過聲明int? AreaCode = null
爲空,但這不起作用。這將返回所有領域,而不是僅僅一個,一樣的,如果我使用了默認null
:
SELECT * FROM PlantAreaCodes
WHERE (110 IS NULL OR AreaCode = 110)
AND (NULL IS NULL OR AreaName LIKE NULL)
AND (NULL IS NULL OR Comments LIKE NULL);
但是這個查詢返回一個字段:
SELECT * FROM PlantAreaCodes
WHERE (110 IS NULL OR AreaCode = 110)
AND ('%General%' IS NULL OR AreaName LIKE '%General%')
AND (NULL IS NULL OR Comments LIKE NULL);
這將返回包含單詞「一般」的所有字段在名稱中:
SELECT * FROM PlantAreaCodes
WHERE (NULL IS NULL OR AreaCode = NULL)
AND ('%General%' IS NULL OR AreaName LIKE '%General%')
AND (NULL IS NULL OR Comments LIKE NULL);
如何在此查詢中使用不可爲空的類型?
您可以顯示您用來發出數據庫請求的C#代碼嗎? –
您是否直接運行查詢數據庫來檢查它是否適用於您要與之調用的輸入組合? –
@PreetSangha是的查詢本身是健全的,我相信問題在於'AreaCode'參數,因爲它是一個'int',所以它的默認值是'0',而不是'null'。 – Ben