如何将数据网格值保存到sql数据库,将整个值保存到一个主键,我试过了,但不起作用

本文关键字:保存 不起作用 一个 过了 数据网 数据 网格 sql 数据库 | 更新日期: 2023-09-27 18:27:37

我得到一个异常"索引超出范围。必须不是负数并且小于集合的大小。参数名称:index

    private void button3_Click(object sender, EventArgs e)
    {
        try
        {
            if (txtSubtotal.Text == "")
            {
                MessageBox.Show("The Sub Total cannot be Empty", "Input Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                txtSubtotal.Focus();
                return;
            }
            if (txtamountdue.Text == "")
            {
                MessageBox.Show("The Amountdue cannot be Empty", "Input Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                txtamountdue.Focus();
                return;
            }
            if (txtcashgiven.Text == "")
            {
                MessageBox.Show("Please enter the cash given", "Input Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                txtcashgiven.Focus();
                return;
            }
            if (txtchange.Text == "")
            {
                MessageBox.Show("The Cahange cannot be Empty", "Input Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                txtchange.Focus();
                return;
            }

            con = new SqlConnection(cs.DBConn);
            con.Open();

            string cb = "insert Into invoiceTB(InvoiceNo,Date,BillTo,CustomerID,SalesBy,Warranty,ShipTo,SubTotal,AmountDue,CashGiven,Change) VALUES (@d1,@d2,@d3,@d4,@d5,@d6,@d7,@d8,@d9,@d10,@d11)";
            cmd = new SqlCommand(cb);
            cmd.Connection = con;
            cmd.Parameters.AddWithValue("@d1",txtInvoice.Text);
            cmd.Parameters.AddWithValue("@d2",dateTimePicker1.Text);
            cmd.Parameters.AddWithValue("@d3",txtBillTo.Text);
            cmd.Parameters.AddWithValue("@d4", cmbcustomerID.Text);
            cmd.Parameters.AddWithValue("@d5",txtSalesBy.Text);
            cmd.Parameters.AddWithValue("@d6",txtwarranty.Text);
            cmd.Parameters.AddWithValue("@d7",txtshipto.Text);
            cmd.Parameters.AddWithValue("@d8",txtSubtotal.Text);
            cmd.Parameters.AddWithValue("@d9",txtamountdue.Text);
            cmd.Parameters.AddWithValue("@d10",txtcashgiven.Text);
            cmd.Parameters.AddWithValue("@d11",txtchange.Text);
            cmd.ExecuteReader();
            if (con.State == ConnectionState.Open)
            {
                con.Close();
            }
            con.Close();

            for (int i = 0; i <= dataGridView1.Rows.Count - 1; i++)
            {
                con = new SqlConnection(cs.DBConn);
                string cd = "insert Into invoiceTB(ItemCode,Description,Quantity,PriceEach,Amount) VALUES (@d1,@d2,@d3,@d4,@d5)";
                cmd = new SqlCommand(cd);
                cmd.Connection = con;
                cmd.Parameters.AddWithValue("d1", dataGridView1.Rows[i].Cells[1].Value);
                cmd.Parameters.AddWithValue("d2", dataGridView1.Rows[i].Cells[2].Value);
                cmd.Parameters.AddWithValue("d3", dataGridView1.Rows[i].Cells[4].Value);
                cmd.Parameters.AddWithValue("d4", dataGridView1.Rows[i].Cells[3].Value);
                cmd.Parameters.AddWithValue("d5", dataGridView1.Rows[i].Cells[5].Value);
                con.Open();
                cmd.ExecuteNonQuery();
                con.Close();
            }
            btnSave.Enabled = false;
            btnprint.Enabled = true;
            MessageBox.Show("Successfully Placed", "Order", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
    }

如何将数据网格值保存到sql数据库,将整个值保存到一个主键,我试过了,但不起作用

不清楚你在问什么,但我看到了一些东西;

  • 您需要在第一个插入语句中使用ExecuteNonQuery而不是ExecuteReader。那只是执行你的代码。ExecuteReader方法返回数据。由于你只是插入数据,使用它毫无意义。

  • 您需要在AddWithValue方法中的第二个插入命令参数名称中使用@

  • 使用using语句处理数据库连接和对象。

  • DATE可以是SQL Server未来版本的保留关键字。你可能需要避免使用它。

  • 作为最佳实践,不要使用AddWithValue方法。它可能会产生意想不到的结果。请改用.Add()方法。Read我们可以停止使用AddWithValue()吗?

对于您的错误消息,请阅读What is an";索引超出范围";异常,以及如何修复它?