C# SqlBulkCopy错误(已经有一个打开的DataReader…)

C# SqlBulkCopy错误(已经有一个打开的DataReader…),c#,sqlbulkcopy,C#,Sqlbulkcopy,我正在尝试从一个sql表复制到另一个sql表。两个表位于同一数据库中。我试图使用SqlBulkCopy,但收到“已经有一个打开的DataReader与此命令关联,必须先关闭。”错误 我发现了许多类似的问题,并尝试了其中包含的解决方案,但没有成功。我对这个很陌生,所以任何关于这个(或下面的代码)的帮助都是非常感谢的 SqlCommand readLocal = new SqlCommand("Select CompanyNumber,CompanyName,AccessNumber,TruckNa

我正在尝试从一个sql表复制到另一个sql表。两个表位于同一数据库中。我试图使用SqlBulkCopy,但收到“已经有一个打开的DataReader与此命令关联,必须先关闭。”错误

我发现了许多类似的问题,并尝试了其中包含的解决方案,但没有成功。我对这个很陌生,所以任何关于这个(或下面的代码)的帮助都是非常感谢的

SqlCommand readLocal = new SqlCommand("Select CompanyNumber,CompanyName,AccessNumber,TruckName,TransferStartTime,TransferEndTime,TransferVolume FROM TransfersNew", conLocal);

try
{
    conLocal.Open();
    using (SqlBulkCopy bulkCopy = new SqlBulkCopy(conLocal))
    {
        bulkCopy.DestinationTableName = "dbo.TransfersHistory";

        try
        {
            using (SqlDataReader readerLocal = readLocal.ExecuteReader())
            {
                while (readerLocal.Read())
                {
                    bulkCopy.WriteToServer(readerLocal);
                }
            }
        }
        catch (Exception ex)
        {
            Globals.infoString = ex.Message;
            Globals.infoStringColor = true;
            var newForm = new pagePopupInfo();
            newForm.ShowDialog();
        }
        finally
        {
            conLocal.Close();
        }
    }
}
catch (Exception ex)
{
    Globals.infoString = ex.Message;
    Globals.infoStringColor = true;
    var newForm = new pagePopupInfo();
    newForm.ShowDialog();
}
finally
{
    conLocal.Close();
}
我对建议持开放态度。谢谢

马修斯的建议奏效了。我关于不复制数据的另一个问题是,它只是不复制第一条记录。我将代码更改为此以更正该问题:

try
        {
            conLocal.Open();
            using (SqlBulkCopy bulkCopy = new SqlBulkCopy(conLocal))
            {
                bulkCopy.DestinationTableName = "dbo.TransfersHistory";
                SqlDataReader readerLocal = readLocal.ExecuteReader();
                bulkCopy.WriteToServer(readerLocal);
            }
        }

您有两个使用的原因,一个在另一个内部,因此它被视为两个连接

您可以尝试以下方法:

                   using (SqlBulkCopy bulkCopy = new SqlBulkCopy(conLocal))
                   using (SqlDataReader readerLocal = readLocal.ExecuteReader())
                    {
                        while (readerLocal.Read())
                        {
                            bulkCopy.WriteToServer(readerLocal);
                        }
                    }  

连接字符串中可能存在Add MultipleActiveResultSets=true的重复项。我听从了马修斯的建议,不再犯错误,所以谢谢你。但是,它也没有将数据复制到TransfersHistory表中。所以我会深入研究并报告。不幸的是,这产生了同样的结果。谢谢我的错误。在我的连接字符串中使用MultipleActiveResultSets=true可以解决此问题。谢谢