Это делает мою кору в ... Работаю в VB.net 2010 и 2013 годах. У меня есть данные, которые создаются «на лету» и Я хочу как можно быстрее поместить указанные данные в таблицу в моей базе данных SQL Server. В настоящее время единственное, что я могу получить, это «вставить в ...» для каждой строки в datatable, создав sql для вставки каждого значения в каждое поле. Я бы хотел, чтобы для SqlServer.datatable = onTheFlyDataTable.VB.Net SQL Server копирует данные из базы данных «на лету» в базу данных
Я пробовал ряд за строкой, но я не могу заставить это работать, поскольку SQL, который я использую для моей таблицы серверов, является «SELECT * FROM ...», который явно доступен только для чтения.
То, что я действительно запускал без ошибок, было чем-то вроде этого, но никогда не записывало данные обратно в базу данных SQL Server. Я бежал без ошибок, а dtTEST в конце этого сделал, содержащий все строки, которые я добавил - он просто не записывал его обратно в базу данных. Даже попытался .AcceptChanges ...
Dim sSYSsqlTEST As String = "SELECT * FROM MyDataBaseTable;"
Debug.Print(sSYSsqlTEST)
Dim cmdTEST As SqlCommand = New SqlCommand(sSYSsqlTEST, cNN)
Dim daTEST As SqlDataAdapter = New SqlDataAdapter(cmdTEST)
Dim dsTEST As DataSet = New DataSet
If Not IsNothing(daTEST) Then
daTEST.Fill(dsTEST, "TEST")
End If
Dim dtTEST As DataTable = dsTEST.Tables("TEST")
For each dr as datarow in myOnTheFlyDataTable
Dim workRow As DataRow = workTable.NewRow()
workRow = dr
workTable.Rows.Add (workRow)
Next
Является ли то, что я пытаюсь сделать достижимым?
На основании ответа Прадипом, я уже изменил к этому, но я получаю «Данный ColumnMapping не совпадает с какой-либо столбца в источнике или назначения. »
Using bulkCopy As SqlBulkCopy = New SqlBulkCopy(cNN)
bulkCopy.DestinationTableName = "dbo." + sCUSTOMER + "_IMPORT"
With bulkCopy.ColumnMappings
For x As Integer = 0 To iNOfields
Debug.Print("Column " + x.ToString + " Datatype = " + dtIMPORT.Columns(x).DataType.ToString)
.Add(dtIMPORT.Columns(x).ColumnName, "[FIELD " + x.ToString + "]")
Next
End With
Try
' Write from the source to the destination.
bulkCopy.WriteToServer(dtIMPORT)
Catch ex As Exception
Debug.Print(ex.Message)
Debug.Print("")
End Try
End Using
Thanks Pradeep. Я думаю, что моя проблема в том, что не все типы полей совпадают: в System.Data.dll произошла первая случайная ошибка типа «System.InvalidOperationException». Данные ColumnMapping не соответствуют ни одному столбцу источника или адресата. Этот coulod будет проблемой, так как на лету, который вылетает на лету, берется из электронной таблицы, которая может устанавливать число как число, где некоторые из них в моей таблице являются varchar (250). Я могу заставить заставить excel читать делать строки, но не надеяться на это. Есть ли другой способ делать строки за строкой, если это не сработает? – Tym
Да, если определения столбцов не совпадают, вы можете указать информацию сопоставления столбцов в свойстве 'ColumnMappings'. –
Я обновил код выше, чтобы показать, как можно сопоставить информацию о сопоставлении столбцов. НТН. –