如何通过winforms中的c#从一个表中获取所有记录并将其保存到另一个表中?
大家好,我正在尝试从tblInvoiceItemsTemp表中获取所有记录,并将所有记录保存在tblInvoiceItems表中,但无法解决。任何帮助都将不胜感激,谢谢 我在btnSave_Click()事件中添加了以下代码 我收到以下错误消息如何通过winforms中的c#从一个表中获取所有记录并将其保存到另一个表中?,c#,mysql,sql,ado.net,C#,Mysql,Sql,Ado.net,大家好,我正在尝试从tblInvoiceItemsTemp表中获取所有记录,并将所有记录保存在tblInvoiceItems表中,但无法解决。任何帮助都将不胜感激,谢谢 我在btnSave_Click()事件中添加了以下代码 我收到以下错误消息 An unhandled exception of type 'MySql.Data.MySqlClient.MySqlException' occurred in MySql.Data.dll Additional Information: There
An unhandled exception of type 'MySql.Data.MySqlClient.MySqlException' occurred in MySql.Data.dll
Additional Information: There is already an open DataReader associated with this Connection which must be closed first.
错误信息非常清楚:当您打开数据读取器时(您没有调用
Close
/Dispose
),该连接不能用于任何其他用途。一种方法是打开第二个连接:
using (MySqlCommand sqlcmd = new MySqlCommand(load_temp_table_rec_qry, cnn1))
{
MySqlDataReader temp_reader = sqlcmd.ExecuteReader();
using (var secondConnection = new MySqlConnection(connetionString1))
{
secondConnection.Open();
while (temp_reader.Read())
{
string insert_invoice_items_qry = "INSERT INTO tblInvoiceItems(invoiceID, particulars, qty, rate) VALUES('" + 12 + "', '" + temp_reader["particulars"] + "', '" + temp_reader["qty"] + "', '" + temp_reader["rate"] + "')";
using (MySqlCommand itemsCmd = new MySqlCommand(insert_invoice_items_qry, secondConnection))
{
itemsCmd.ExecuteNonQuery();
}
}
}
}
另一种方法是使用断开连接的模型,并使用MySqlDataAdapter
将记录加载到DataTable
,这样连接就可以免费用于itemsCmd
但是,您不需要将所有记录下载到内存中,您可以在SELECT中插入
,以获得更好的性能:
INSERT INTO tblInvoiceItems(invoiceID, particulars, qty, rate)
SELECT 12, tblInvoiceItemsTemp.particulars, tblInvoiceItemsTemp.qty, tblInvoiceItemsTemp.rate
FROM tblInvoiceItemsTemp
在关闭连接之前关闭datareader(temp_reader.close())。我怀疑这可能就是问题所在。非常感谢@VickySThank,非常感谢你,让我试试这个解决方案。等待15位知名人士投票支持这个解决方案。你救了我的命,衷心感谢。很高兴能帮忙。我只是好奇,你赞成这3个建议中的哪一个?我肯定会使用insert-into()选择查询,因为你说这是更好的方法。我也会使用DataTable进行测试。
INSERT INTO tblInvoiceItems(invoiceID, particulars, qty, rate)
SELECT 12, tblInvoiceItemsTemp.particulars, tblInvoiceItemsTemp.qty, tblInvoiceItemsTemp.rate
FROM tblInvoiceItemsTemp