Как избежать ошибки "В MSSql 2000 уже есть открытый DataReader, связанный с этой командой"
Я использую SqlBulkCopy для копирования данных в 2 отдельные таблицы в той же базе данных.
obj_Command.CommandText = "Select * from tmpInvDtlMast where InvNo='111'"
Using bulkCopy As SqlBulkCopy = New SqlBulkCopy(con1)
bulkCopy.DestinationTableName = "tmpInvDtlMast"
Try
bulkCopy.WriteToServer(obj_Command.ExecuteReader())
Application.DoEvents()
Catch ex As Exception
Console.WriteLine(ex.Message)
Finally
bulkCopy.Close()
End Try
End Using
Using bulkCopy As SqlBulkCopy = New SqlBulkCopy(con1)
bulkCopy.DestinationTableName = "InvDtlMast"
Try
bulkCopy.WriteToServer(obj_Command.ExecuteReader())
Application.DoEvents()
Catch ex As Exception
Console.WriteLine(ex.Message)
Finally
bulkCopy.Close()
End Try
End Using
Во второй массовой загрузке эта ошибка происходит
Уже есть открытый DataReader, связанный с этой командой
Я попытался "MultipleActiveResultSets=true" с моей строкой подключения
con1.ConnectionString = "Data Source=" & SqlServer & ";Initial Catalog=" & Database & ";Persist Security Info=True;User ID=" & User & ";Password=" & Pass & ";MultipleActiveResultSets=true"
После поиска новых решений я узнал, что MultipleActiveResultSets = true не поддерживает MSSql 2000. Есть ли что-то, чтобы решить эту проблему в Sql2000. Пожалуйста помоги
Я использую vb.net 2008
2 ответа
Решение
Я решил мою проблему. Что я сделал, это удалить
obj_Command.ExecuteReader()
с новым экземпляром SqlDataReader.
obj_Command.CommandText = "Select * from tmpInvDtlMast where InvNo='111'"
Dim dr as SqlDataReader()
dr=obj_Command.ExecuteNoneQuery()
Using bulkCopy As SqlBulkCopy = New SqlBulkCopy(con1)
bulkCopy.DestinationTableName = "tmpInvDtlMast"
Try
bulkCopy.WriteToServer(dr)
Application.DoEvents()
Catch ex As Exception
Console.WriteLine(ex.Message)
Finally
dr.Close()
End Try
End Using
Using bulkCopy As SqlBulkCopy = New SqlBulkCopy(con1)
bulkCopy.DestinationTableName = "InvDtlMast"
Try
bulkCopy.WriteToServer(dr)
Application.DoEvents()
Catch ex As Exception
Console.WriteLine(ex.Message)
Finally
dr.Close()
End Try
End Using
В качестве обходного пути попробуйте дублировать соединение и команду:
obj_Command.CommandText = "Select * from tmpInvDtlMast where InvNo='111'"
Using bulkCopy As SqlBulkCopy = New SqlBulkCopy(con1)
bulkCopy.DestinationTableName = "tmpInvDtlMast"
Try
bulkCopy.WriteToServer(obj_Command.ExecuteReader())
Application.DoEvents()
Catch ex As Exception
Console.WriteLine(ex.Message)
Finally
bulkCopy.Close()
End Try
End Using
Using bulkCopy As SqlBulkCopy = New SqlBulkCopy(**con2**)
bulkCopy.DestinationTableName = "InvDtlMast"
Try
bulkCopy.WriteToServer(**obj_Command2**.ExecuteReader())
Application.DoEvents()
Catch ex As Exception
Console.WriteLine(ex.Message)
Finally
bulkCopy.Close()
End Try
End Using