Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Работа с данными

Страница: 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 чистит таблицу

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам