在表1中插入使用access在c#中单击按钮更新表2

在表1中插入使用access在c#中单击按钮更新表2,c#,ms-access,multiple-tables,C#,Ms Access,Multiple Tables,好的,这是我的问题。我正在为工作制作一个新的GUI。没什么特别的,只是输入信息并打印在标签上。我已经设法让代码在单击按钮时将值插入MainLabel表,但是我还需要这些值来更新Label表中的第一行 出于某种原因,它将插入但不执行更新。我怎样才能做到这一点?以下是我所能提供的任何帮助,将不胜感激 更新后仍不工作 OleDbConnection con = new OleDbConnection(); con.ConnectionString = @"Provider=M

好的,这是我的问题。我正在为工作制作一个新的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();

您没有执行
cmd1

cmd1.ExecuteNonQuery();

旁注,使用
语句使用
中的所有
IDisposable
对象。

失败原因:您只执行
OleDBCommand
对象
cmd
,而不执行发出update命令的
cmd1

解决方案1: 您必须执行
OleDBCommand
对象
cmd1
(更新命令),如下所示:

cmd1.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(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,? ,?)");
解决方案2:

您可以将insert和update命令组合成一个字符串,并执行一次,如下所示

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();
注意:在两个命令之间添加分号

解决方案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();
                }

            }

        }
按如下方式调用上述函数:

cmd1.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(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,? ,?)");

Sudhakar,我尝试过这个,我得到了这个错误{“在SQL语句结束后找到的字符。”}您是否在insert命令后的字符串中添加了分号,如我的回答所示?是的,就是在这个时候它抛出了这个错误。我复制了你的答案并粘贴了下来。然后,我还尝试以另一种方式恢复并执行cmd1,得到了另一种方法error@xgonnahaveitx:请查看我的更新答案,其中包含第3个选项:希望有帮助:)转到cmd1.executenonquery();我得到ExecuteOnQuery:Connection属性尚未初始化。这是surley,因为您尚未使用任何连接对象初始化oleDBCommand对象cmd1,请执行以下操作:cmd1.Connection=con;在执行cmd1之前。