如何将数据网格值保存到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);
}
}
不清楚你在问什么,但我看到了一些东西;
-
您需要在第一个插入语句中使用
ExecuteNonQuery
而不是ExecuteReader
。那只是执行你的代码。ExecuteReader
方法返回数据。由于你只是插入数据,使用它毫无意义。 -
您需要在
AddWithValue
方法中的第二个插入命令参数名称中使用@
。 -
使用
using
语句处理数据库连接和对象。 -
DATE
可以是SQL Server未来版本的保留关键字。你可能需要避免使用它。 -
作为最佳实践,不要使用
AddWithValue
方法。它可能会产生意想不到的结果。请改用.Add()
方法。Read我们可以停止使用AddWithValue()吗?
对于您的错误消息,请阅读What is an";索引超出范围";异常,以及如何修复它?