我正在尝试从一个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);
}
}
答案 0 :(得分:0)
之所以要使用两个,一个在另一个内,是因为它被视为两个连接。
您可以尝试以下方法:
using (SqlBulkCopy bulkCopy = new SqlBulkCopy(conLocal))
using (SqlDataReader readerLocal = readLocal.ExecuteReader())
{
while (readerLocal.Read())
{
bulkCopy.WriteToServer(readerLocal);
}
}