Страница: 1 |
Страница: 1 |
Вопрос: Скопировать данные из однои таблицы в другую
Добавлено: 06.04.06 12:28
Автор вопроса: student-uni
Задача:
Скопировать данные из однои таблицы А /Аксесс/ в другую Б /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
' собираем все до кучи
' в результате имеем СКЮЛь запрос для ввода однои строки
' делаем коммандо и выполняем запрос
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
'Строка заполнена. Повторяем все для всех строк
Ответы
Всего ответов: 3
Номер ответа: 1
Автор ответа:
student-uni
Вопросов: 122
Ответов: 257
Профиль | | #1
Добавлено: 06.04.06 12:42
На счет ДТС:
Моя прога на клиентскои машине которая использует удаленныи СКЛ сервер,
Моя прога создает себе скриптом базу на етом сервере.
Но теперь мне нужно заполнить ету базу некоторыми значениями, которые всегда разные и лежат на клиентскои
машине в аксессе.
Так сказать "сидя на клиенте" у меня нет доступа к Ентерпраиз менеджер.
В вышеприведенном примере я могу все же чисто теоретически составить скрипт из всех полученных инструкции и запустить его на сервере.
Номер ответа: 2
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #2
Добавлено: 06.04.06 19:23
FileCopy всей бд в другой файл коннектимся к ней и TRUNCATE TABLE [YourTableName]
Номер ответа: 3
Автор ответа:
student-uni
Вопросов: 122
Ответов: 257
Профиль | | #3
Добавлено: 07.04.06 12:49
это шутка что ли ?
TRUNCATE TABLE чистит таблицу