0

わかりました、ここに私の問題があります。仕事用に新しいGUIを作っています。特別なものではなく、ラベルに印刷する情報を入力するためのものです。ボタンのクリック時に MainLabel テーブルに値を挿入するコードを動作させることができましたが、Label テーブルの最初の行だけを更新するためにもこれらが必要です。

何らかの理由で挿入はしますが、更新はしません。どうすればそれを実現できますか?ここに私が持っているものがあります。

更新しても機能しない

     OleDbConnection con = new OleDbConnection();
        con.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Jim\Desktop\WindowsFormsApplication1\WindowsFormsApplication1\labels1.mdb;Persist Security Info=False";

        OleDbCommand cmd = new OleDbCommand();
        OleDbCommand cmd1 = new OleDbCommand();
        cmd.CommandType = CommandType.Text;
        cmd1.CommandType = CommandType.Text;
        cmd1.CommandText = "UPDATE Label SET SaleOrderNumber = @SaleOrderNumber, NsN = @NsN, NsNBarcode = @NsNBarcode, PartNumber = @PartNumber, Qty = @Qty, Description = @Description, CustomerPo = @CustomerPo, CustomerPoBarcode = @CustomerPoBarcode, PackingCode = @PackingCode, Weight = @Weight, Clin = @Clin, SaleOrderDate = @SaleOrderDate, MCM = @MCM, Cage = @Cage ";

        cmd.CommandText = "INSERT into MainLabel ([SaleOrderNumber], [NsN], [NsNBarcode], [PartNumber], [Qty], [Description], [CustomerPo], [CustomerPoBarcode], [PackingCode], [Weight], [Clin], [SaleOrderDate], [MCM], [Cage]) values(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,? ,?)";



        cmd.Parameters.AddWithValue("@SaleOrderNumber", label1.Text);
        cmd.Parameters.AddWithValue("@NsN", label6.Text);
        cmd.Parameters.AddWithValue("@NsNBarcode", label6.Text);
        cmd.Parameters.AddWithValue("@PartNumber", label2.Text);
        cmd.Parameters.AddWithValue("@Qty", label7.Text);
        cmd.Parameters.AddWithValue("@Description", label3.Text);
        cmd.Parameters.AddWithValue("@CustomerPo", label8.Text);
        cmd.Parameters.AddWithValue("@CustomerPoBarcode", label8.Text);
        cmd.Parameters.AddWithValue("@PackingCode", label4.Text);
        cmd.Parameters.AddWithValue("@Weight", label9.Text);
        cmd.Parameters.AddWithValue("@Clin", label5.Text);
        cmd.Parameters.AddWithValue("@SaleOrderDate",label12.Text);
        cmd.Parameters.AddWithValue("@MCM", label10.Text);
        cmd.Parameters.AddWithValue("@Cage", label11.Text);
        cmd.Connection = con;




        con.Open();

        cmd.ExecuteNonQuery();
        cmd1.ExecuteNonQuery();
        con.Close();
4

2 に答える 2

1

あなたは実行していませんcmd1

cmd1.ExecuteNonQuery();

補足として、ステートメントではすべてのIDisposableオブジェクトを使用してください。using

于 2013-11-08T06:43:42.280 に答える
1

失敗の理由:OleDBCommandオブジェクトを実行しているだけで、update コマンドが指定されcmdた場所を実行していません 。cmd1

解決策 1:OleDBCommand以下のようにオブジェクトcmd1(更新コマンド) を実行する必要があります。

cmd1.ExecuteNonQuery();

解決策 2:

以下のように、挿入コマンドと更新コマンドの両方を 1 つの文字列に結合し、1 回実行することができます。

String command="";
command= "INSERT into MainLabel ([SaleOrderNumber], [NsN], [NsNBarcode], [PartNumber], [Qty], [Description], [CustomerPo], [CustomerPoBarcode], [PackingCode], [Weight], [Clin], [SaleOrderDate], [MCM], [Cage]) values(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,? ,?);";
command+="UPDATE Label SET SaleOrderNumber = @SaleOrderNumber, NsN = @NsN, NsNBarcode = @NsNBarcode, PartNumber = @PartNumber, Qty = @Qty, Description = @Description, CustomerPo = CustomerPo, CustomerPoBarcode = @CustomerPoBarcode, PackingCode = @PackingCode, Weight = @Weight, Clin = @Clin, SaleOrderDate = @SaleOrderDate, MCM = @MCM, Cage = @Cage ";

cmd.CommanText=command;

cmd.ExecuteNonQuery();

注 : 2 つのコマンドの間にセミコロンを追加します。

解決策 3: SQL コマンドを実行する関数を作成します。これにより、OleDB 接続とコマンド オブジェクトの作成と破棄が行われます。

private  void RunMyCommand(String SQLCommand)
        {
            using (OleDbConnection con = new OleDbConnection())
            {
                con.ConnectionString =
                    @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Jim\Desktop\WindowsFormsApplication1\WindowsFormsApplication1\labels1.mdb;Persist Security Info=False";
                con.Open();
                using (OleDbCommand cmd = new OleDbCommand())
                {

                    cmd.CommandType = CommandType.Text;
                    cmd.CommandText = SQLCommand;
                    cmd.Parameters.AddWithValue("@SaleOrderNumber", label1.Text);
                    cmd.Parameters.AddWithValue("@NsN", label6.Text);
                    cmd.Parameters.AddWithValue("@NsNBarcode", label6.Text);
                    cmd.Parameters.AddWithValue("@PartNumber", label2.Text);
                    cmd.Parameters.AddWithValue("@Qty", label7.Text);
                    cmd.Parameters.AddWithValue("@Description", label3.Text);
                    cmd.Parameters.AddWithValue("@CustomerPo", label8.Text);
                    cmd.Parameters.AddWithValue("@CustomerPoBarcode", label8.Text);
                    cmd.Parameters.AddWithValue("@PackingCode", label4.Text);
                    cmd.Parameters.AddWithValue("@Weight", label9.Text);
                    cmd.Parameters.AddWithValue("@Clin", label5.Text);
                    cmd.Parameters.AddWithValue("@SaleOrderDate", label12.Text);
                    cmd.Parameters.AddWithValue("@MCM", label10.Text);
                    cmd.Parameters.AddWithValue("@Cage", label11.Text);
                    cmd.Connection = con;
                    cmd.ExecuteNonQuery();
                }

            }

        }

上記の関数を次のように呼び出します。

 RunMyCommand("UPDATE Label SET SaleOrderNumber = @SaleOrderNumber, NsN = @NsN, NsNBarcode = @NsNBarcode, PartNumber = @PartNumber, Qty = @Qty, Description = @Description, CustomerPo = @CustomerPo, CustomerPoBarcode = @CustomerPoBarcode, PackingCode = @PackingCode, Weight = @Weight, Clin = @Clin, SaleOrderDate = @SaleOrderDate, MCM = @MCM, Cage = @Cage ");
 RunMyCommand("INSERT into MainLabel ([SaleOrderNumber], [NsN], [NsNBarcode], [PartNumber], [Qty], [Description], [CustomerPo], [CustomerPoBarcode], [PackingCode], [Weight], [Clin], [SaleOrderDate], [MCM], [Cage]) values(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,? ,?)");
于 2013-11-08T06:47:12.710 に答える