C# 如何将未绑定datagridview中的信息保存到SQL数据库
几个小时以来,我一直在尝试获取datagridview中的信息以保存到datatable中。datagridview从进行选择的组合框中填充。我搞不懂的是如何将C# 如何将未绑定datagridview中的信息保存到SQL数据库,c#,winforms,datagridview,C#,Winforms,Datagridview,几个小时以来,我一直在尝试获取datagridview中的信息以保存到datatable中。datagridview从进行选择的组合框中填充。我搞不懂的是如何将订购数量转换为int。我相信一旦我有了它就会起作用 另外,是否可以使用datagridview的列名而不是单元格[] foreach (DataGridViewRow row in purchase_Order_ItemsDataGridView.Rows) { if (!row.IsNewRow)
订购数量
转换为int
。我相信一旦我有了它就会起作用
另外,是否可以使用datagridview的列名而不是单元格[]
foreach (DataGridViewRow row in purchase_Order_ItemsDataGridView.Rows)
{
if (!row.IsNewRow)
{
SQL = @"INSERT INTO Purchase_Order_Items (Purchase_Order_ID, Part_Number, Qty_Ordered, Work_Order_Number)
VALUES(@purchase_Order_Id, @part_Number, @qty_Ordered, @work_Order_Number)";
sqlCommand = new SqlCommand(SQL, DataAccessClass.sql_Connection);
sqlCommand.Parameters.AddWithValue("@purchase_Order_ID", purchase_Order_Id);
sqlCommand.Parameters.AddWithValue("@part_Number", row.Cells[1].Value);
sqlCommand.Parameters.AddWithValue("@qty_Ordered", row.Cells[2].Value);
sqlCommand.Parameters.AddWithValue("@work_Order_Number", row.Cells[3].Value);
sqlCommand.ExecuteNonQuery();
}
}
你试过这个吗?诚然,这是一个权宜之计,但它确实将其转换为int
sqlCommand.Parameters.AddWithValue("@qty_Ordered", int.parse(row.Cells[2].Value.ToString()));
编辑:此链接可能对您有更多帮助-
它处理转换单元格的方法,比上面的解决方案更健壮,当值为null时,将显著失败
编辑2:看起来上面的解决方案不够健壮。下面的代码更健壮
int qtyordered;
if (!int.TryParse(row.Cells[2].Value.ToString(), out qtyordered)
qtyordered = 0;
sqlCommand.Parameters.AddWithValue("@qty_Ordered", qtyordered);
Loathing的答案将是最好的,因为它可以透明地与您当前的代码一起工作,但是它有点棘手。您需要公开datatable的列,以便可以修改类型。您需要在创建列时/之后以及开始添加数据之前执行此操作
purchase_Order_ItemsDataGridView.Columns[2].ValueType = typeof(int);
在开始填充表之前,但在创建列之后,您需要尽早将其放置在某个位置。是否有错误?你面临的确切问题是什么?@Alejandro;是的,我在将数据类型nvarchar转换为数字时遇到了
错误
当您创建DataGridView
时,您应该为每个DataGridViewColumn
指定正确轨道上的ValueType
。我现在发现错误输入字符串的格式不正确
。我是否应该在将其放入命令字符串之前解析。当某个值无法解析为指定的数据类型时,它会通知您。但是,您的错误是由单元格值引起的。如果您可以保证里面只有数字,那么在该列的某个地方必须有一个空单元格(也称为空值)。