c#
  • sql
  • sql-server
  • 2017-09-14 71 views -2 likes 
    -2

    enter image description here數據不保存在SQL Server表

    我試圖更新SQL Server表中的數據。在查詢執行後,我收到一條消息,說明數據已保存。

    但是,當我檢查該表時,我發現數據沒有保存。我的查詢有什麼不對嗎?

    我正在使用SQL Server 2008和C#進行編碼。

    SqlCommand cmd1 = new SqlCommand("UPDATE Inward_Rpt SET Date='" + date + "',Cashier_Name='" + cashier_name + "',Supplier_Code='" + sup_code + "',Supplier_Name='" + name + "',Payment_Mode ='" + p_method + "',Total_Bill='" + tot_bill + "',Total_Paid='" + tot_paid + "',Previous_Due = '" + total_due + "',Current_Due ='" + c_due + "',Remark ='" + remark + "'WHERE Supplier_Name='" + name + "'", con); 
    cmd1.ExecuteNonQuery(); 
    MessageBox.Show("Data Saved.."); 
    
    +2

    [SQL注入警報(http://msdn.microsoft.com/en-us/library/ms161953%28v=sql.105%29.aspx) - 你應該** **不串連在一起你的SQL語句 - 使用**參數化查詢**代替避免SQL注入 - 檢出[Little Bobby Tables](https://xkcd.com/327/) –

    +0

    你能告訴我們你的**連接字符串**用於連接到SQL Server? –

    +0

    嘗試用'try'和'catch'來包圍這段代碼並放置一個斷點 編輯:你也可以嘗試將所有的'cmd1'字符串複製到你的數據庫並檢查查詢是否沒有錯誤 – styx

    回答

    0

    我想我找到了你的錯誤。您的WHERE子句正在使用與更新供應商名稱相同的name。假設這是一個新名字,你永遠不會找到你想要更新的記錄。下面的代碼更清晰,不容易出現注入問題,它應該按照你想要的方式工作。

    請注意,您將不得不提供一個新變量以迎合name/sup_name的情況。

    SqlCommand cmd1 = new SqlCommand(); 
    cmd1.Connection = con; 
    cmd1.CommandText = @" 
        UPDATE Inward_Rpt 
        SET Date = @date 
         , Cashier_Name = @cashier_name 
         , Supplier_Code = @sup_code 
         , Supplier_Name = @sup_name 
         , Payment_Mode = @p_method 
         , Total_Bill = @tot_bill 
         , Total_Paid = @tot_paid 
         , Previous_Due @total_due 
         , Current_Due = @c_due 
         , Remark = @remark 
        WHERE Supplier_Name = @name"; 
    
    cmd1.Parameters.AddWithValue("@date", date); 
    cmd1.Parameters.AddWithValue("@cashier_name", cashier_name); 
    cmd1.Parameters.AddWithValue("@sup_code", sup_code); 
    cmd1.Parameters.AddWithValue("@sup_name", sup_name); 
    cmd1.Parameters.AddWithValue("@p_method", p_method); 
    cmd1.Parameters.AddWithValue("@tot_bill", tot_bill_name); 
    cmd1.Parameters.AddWithValue("@tot_paid", tot_paid); 
    cmd1.Parameters.AddWithValue("@total_due", total_due); 
    cmd1.Parameters.AddWithValue("@c_due", c_due); 
    cmd1.Parameters.AddWithValue("@remark", remark); 
    cmd1.Parameters.AddWithValue("@name", name); 
    
    cmd1.ExecuteNonQuery(); 
    
    MessageBox.Show("Data Saved.."); 
    
    +0

    @ShivvanandPatil這篇幫助解決你的問題? –

    0

    是否所有字段都是數據庫表中的字符串數據類型?檢查數據類型因爲你給所有數據單引號。如果表格數據類型是數字刪除單引號。

    SqlCommand cmd1 = new SqlCommand("UPDATE Inward_Rpt SET Date='" + date + "',Cashier_Name='" + cashier_name + "',Supplier_Code=" + sup_code + ",Supplier_Name='" + name + "',Payment_Mode ='" + p_method + "',Total_Bill='" + tot_bill + "',Total_Paid='" + tot_paid + "',Previous_Due = '" + total_due + "',Current_Due ='" + c_due + "',Remark ='" + remark + "'WHERE Supplier_Name='" + name + "'", con); 
    
    +0

    沒有一些字段的數據類型是int,有些是錢和日期 –

    +0

    @ShivvanandPatil哪些是你的查詢中的int數據? –

    +0

    supplier_code是一個int數據類型 –

    相關問題