Скопировать данные из однои таблицы А /Аксесс/ в другую Б /MS SQL/
Все поля и имена из А присутствуют в Б и идентичны по имени и типу.
Но Б может иметь и дополнительные поля.
Вот какую уродскую подпрогу наваял я. VB.NET
Если кто наидет умнее решение или алгоритм
-буду признателен.
Заранее Спасибо
- Код: Выделить всё
- ' Итак вынимаем все из Access и запихиваем в Датасет
 Dim ConnectionString2 As String = "Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Registry Path=;Jet OLEDB:Database Locking Mode=1;Data Source= ... итд "
 Dim conn2 As OleDbConnection = New OleDbConnection(ConnectionString2)
 Dim connTools As SqlConnection = New SqlConnection(ConnectionString)
 Dim sql3 As String = "SELECT * FROM " + SourceTab
 Dim da2 As OleDbDataAdapter = New OleDbDataAdapter(sql3, conn2)
 Dim ds2 As DataSet = New DataSet
 ds2.Clear()
 conn2.Open()
 da2.Fill(ds2)
 conn2.Close()
 'Теперь надо изьять Имена полеи и запихнуть их в отдельныи массив
 ' дабы потом использовать их для записи
 Dim SPALTANZAHL As Int32 = ds2.Tables.Item(0).Columns.Count
 Dim SPAHLTENAME(SPALTANZAHL - 1) As String
 Dim i%
 Dim CM As DataColumn
 
 For i = 0 To ds2.Tables.Item(0).Columns.Count - 1
 SPAHLTENAME(i) = ds2.Tables.Item(0).Columns.Item(i).ColumnName()
 Next
 'теперь надо сконструировать запрос типа INSERT INTO имена полеи - значения
 ' Итак для каждои строки в датасете
 For Each zeile2 In ds2.Tables.Item(0).Rows
 
 Dim PfadUpdateStr As String ' сюда будем склеивать имена полеи
 Dim PfadUpdateStr2 As String = " " ' сюда будем склеивать значения полеи
 Dim Erstmal As Boolean = True ' первыи раз запятую между значениями не ставим
 'ето начало запроса
 PfadUpdateStr = " INSERT INTO " + DestTab + "
 ' сколько полеи столько раз и клеим
 For i = 0 To ds2.Tables.Item(0).Columns.Count - 1
 'если значение не пустое
 If Convert.ToString(zeile2.Item(i)) <> "" Then
 If Erstmal = False Then
 ' первыи раз запятую не ставим
 ' потом ставим всегда
 PfadUpdateStr = PfadUpdateStr + ","
 PfadUpdateStr2 = PfadUpdateStr2 + ","
 End If
 Erstmal = False
 ' склеиваем имена колонок
 PfadUpdateStr = PfadUpdateStr + " " + SPAHLTENAME(i)
 
 ' склеиваем значения и если оно текстовое - тогда в кавычки
 
 If (zeile2.Item(i).GetType.ToString) = "System.String" Then
 PfadUpdateStr2 = PfadUpdateStr2 + " '" + Convert.ToString(zeile2.Item(i)) + "' "
 Else
 PfadUpdateStr2 = PfadUpdateStr2 + " " & (zeile2.Item(i))
 End If
 End If
 Next
 PfadUpdateStr = PfadUpdateStr + ") " + " VALUES ( "
 PfadUpdateStr2 = PfadUpdateStr2 + ") "
 PfadUpdateStr = PfadUpdateStr + PfadUpdateStr2
 ' собираем все до кучи
 ' в результате имеем SQL запрос для ввода однои строки
 ' делаем коммандо и выполняем запрос
 Dim PfadUpdateCommand As SqlCommand = New SqlCommand(PfadUpdateStr, connTools)
 
 'выбираем базу
 Dim Cmd1 As SqlCommand = New SqlCommand("USE " + "test1", connTools)
 'включаем идентити /могут идексы попасться/
 Dim Cmd2 As SqlCommand = New SqlCommand("SET IDENTITY_INSERT " + DestTab + " ON", connTools)
 connTools.Open()
 Cmd1.ExecuteNonQuery()
 Cmd2.ExecuteNonQuery() 'Identity On
 Try
 PfadUpdateCommand.ExecuteNonQuery() '
 Catch ex As Exception
 MsgBox(ex.ToString)
 End Try
 'Строка заполнена. Повторяем все для всех строк





