c#
  • sql-server
  • 2013-05-13 114 views 0 likes 
    0

    這是我用C#編寫的代碼段。 MobileName是我的表中的列。 問題是我的查詢格式有問題。如果我們想在C#中使用OR連接兩個查詢,那麼語法是否正確?C#SQL Server查詢

    SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM [Contact Management] WHERE 
         Mobile='"+Convert.ToInt32(txtSearch.Text)+"' OR Name='"+txtSearch.Text+"'",con); 
    
    +4

    不正確的,在所有你不應該有'txtSearch.Text'纏任何引號什麼那麼......我會親自看看使用'參數Query'以及 – MethodMan 2013-05-13 21:14:35

    +0

    ,但如果我刪除代碼段之後,然後它正在工作....這是刪除或部分後,我可以至少選擇移動=某些價值...所以引號不會產生任何問題,我認爲如此...... – user2375245 2013-05-13 21:17:01

    +1

    你需要使用參數插入用戶數據到SQL查詢... – konkked 2013-05-13 21:20:21

    回答

    9

    不,語法是不正確的。它很容易受到SQL注入攻擊。你需要建立這樣的:

    SqlCommand cmd = new SqlCommand("SELECT * FROM [Contact Management] WHERE 
        Mobile= @Search OR Name= @Search") 
    SqlDataAdapter = new SqlDataAdapter(cmd); 
    cmd.Parameters.Add("@Search", SqlDbType.NVarChar, 50).Value = txtSearch.Text; 
    

    你也可以寫查詢是這樣的:

    SELECT * FROM [Contact Management] WHERE @Search IN (Mobile, Name) 
    
    +0

    保持SQL注入部分放在一邊沒有任何使用參數化查詢的方式....我是一個初學者,所以它是很難理解.... – user2375245 2013-05-13 21:21:48

    +1

    參數化查詢是_only_可以接受的方式來執行此操作,而無需在sql注入中運行問題,我不會幫你編寫易受攻擊的代碼。 – 2013-05-13 21:27:08

    5

    像往常一樣,從來不使用字符串連接來構建SQL命令。使用參數化查詢

    string query = "SELECT * FROM [Contact Management] WHERE [email protected] OR [email protected]"; 
    SqlCommand cmd = new SqlCommand(query, con); 
    cmd.Parameters.AddWithValue("@mobile", Convert.ToInt32(txtSearch.Text)); 
    cmd.Parameters.AddWithValue("@name", txtSearch.Text); 
    SqlDataAdapter da= new SqlDataAdapter (cmd); 
    

    參數化查詢將保存您的數據庫從Sql注入攻擊,但也解析您的輸入文本中的問題。如果在搜索文本中你有單引號呢?連接時會出現語法錯誤。

    但是,讓我說,你的代碼將在此之前失敗。如果你的txtSearch中有一個數字,那麼一切都會工作,但如果你有一個字符串。轉換爲Convert.ToInt32的數字將失敗。最好使用

    SqlCommand cmd = new SqlCommand(); 
    string query; 
    int numSearch; 
    if(Int32.TryParse(txtSearch.Text, out numSearch)) 
    { 
        query = "SELECT * FROM [Contact Management] WHERE [email protected]"; 
        cmd.Parameters.AddWithValue("@p1", numSearch); 
    } 
    else 
    { 
        query = "SELECT * FROM [Contact Management] WHERE [email protected]"; 
        cmd.Parameters.AddWithValue("@p1", txtSearch.Text); 
    } 
    cmd.CommandText = query; 
    .... 
    
    +1

    避免.AddWithValue() – 2013-05-13 21:29:54

    相關問題