2017-09-14 12 views
-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'で囲み、ブレークポイントを入れてみましょう EDIT:DBにすべての 'cmd1'文字列をコピーし、クエリにエラーがないかどうかを調べることができます – styx

答えて

0

あなたのエラーが見つかりました。 WHERE句でSupplier Nameを更新するのと同じ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がanswerI上記 –

関連する問題