Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何通过winforms中的c#从一个表中获取所有记录并将其保存到另一个表中?_C#_Mysql_Sql_Ado.net - Fatal编程技术网

如何通过winforms中的c#从一个表中获取所有记录并将其保存到另一个表中?

如何通过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

大家好,我正在尝试从tblInvoiceItemsTemp表中获取所有记录,并将所有记录保存在tblInvoiceItems表中,但无法解决。任何帮助都将不胜感激,谢谢

我在btnSave_Click()事件中添加了以下代码

我收到以下错误消息

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