sql
  • vb.net
  • visual-studio-2015
  • sql-parametrized-query
  • 2017-09-04 56 views 0 likes 
    0

    我已經使用參數化查詢並沒有問題,但是今天我遇到了一個我無法調試的錯誤。 這是我工作的查詢帶有參數不起作用的Vb 2015查詢

    cmd.CommandText = "select idcliente, ragsociale from Clienti where idcliente =" & strName & " or codiceamministrazione='" & strName & "' or piva='" & strName & "' or codfisc='" & strName & "'" 
    

    相同,但參數,而不是基於內部ID或商業工作

    cmd.CommandText = "select idcliente, ragsociale from Clienti where idcliente = @Cliente or [email protected] or [email protected] or [email protected]" 
    cmd.Parameters.AddWithValue("@Cliente", strName) 
    

    我自動完成過程中使用此,顯示了客戶端的名稱許可證號碼(和其他類似的代碼)。在數據庫客戶端記錄可以有所有的代碼字段編譯或只是1.

    隨着非參數化查詢自動完成建議彈出,與參數化的一個沒有顯示。沒有錯誤。

    編輯: 使用相同的功能這

    cmd.Parameters.Add("@Cliente", SqlDbType.VarChar) 
    cmd.Parameters("@Cliente").Value = strName 
    

    現在另一個查詢(semplicity前省略)的作品,但是,自嘆不如,一個爲我所做的這個問題沒有。

    工作:

    cmd.CommandText = "select idcliente, ragsociale from Clienti where ragsociale like '%'[email protected]+'%' or [email protected]" 
    

    仍無法正常工作:

    cmd.CommandText = "select idcliente, ragsociale from Clienti where idcliente = @Cliente or [email protected] or [email protected]" 
    
    +0

    你知道你可以將其重寫爲'where @Cliente in(idcliente,codiceamministrazione,piva,codfisc)' –

    +0

    請不要使用.AddWithValue!我認爲,這是問題所在。 – muffi

    +0

    [Joel Coehoorn的博客文章](https://blogs.msmvps.com/jcoehoorn/blog/2014/05/12/can-we-stop-using-addwithvalue-already/)重申muffi的言論。 –

    回答

    0

    在原來的查詢,對idcliente測試時,你把strName數字(不包括引號輪),但所有其他領域你把它當作一個字符串。所以你暗示它可能包含一個數字或一個字符串。這是有問題的,如果您鍵入一個數字,並且查詢的參數化版本現在在所有情況下都將其視爲字符串,那麼它將與數據庫中的idcliente的數值不匹配,因此您可能不會得到任何結果。要明確:如果你的輸入是一個數字,但你的查詢認爲它是一個字符串(因爲param中的數據類型),它不會與數據庫中的任何數字字段相匹配。 12345 != "12345"

    您需要爲這些場景定義單獨的參數。您可以將相同的值傳遞給它們,但在一種情況下,將參數的數據類型設置爲varchar,在另一種情況下將其設置爲int(在執行此操作之前,您可能需要檢查該值是否可以解析爲數字,否則可能會在這種情況下,只需將其設置爲null或0或不會意外匹配的內容)。

    相關問題