sqlserver-创建一个导入程序来清除数据库并迁移新数据



在过去的几天里,我被要求将一个公司程序从Access后端转移到SQL Server。

该程序有两个副本,实时数据版本在服务器上,本地版本在我的电脑C:驱动器上,以确保如果我犯了错误,它不会影响实时数据。

因此,我设法将Access数据库、表和数据迁移到SQLServer2008,该程序的本地版本现在可以工作了。

据我所知,现在对该程序的实时版本执行同样操作的最简单方法是编写一个导入程序,该程序会擦除SQL Server数据库中每个表中的所有数据,然后从实时Access数据库中复制数据。然而,我以前从未这样做过,所以我甚至不确定从哪里开始。

有人能告诉我如何开始或完成这项工作的正确方向吗?这样我只需要更改程序中的连接路径,而不需要重新完成整个过程?

PS,我在vb.net工作,所以这是我需要任何回应的语言!

谢谢。

通常使用SQL Server导入和导出向导。

它是一个单独的工具,与SQL Server Management Studio(SSMS)一起安装。

答案

  • 步骤1;

    我为ini文件添加了一个新路径,供数据库读取。这已连接到活动数据库。在项目中打开此连接后,继续执行步骤2。

  • 步骤2;

    创建一个新类,在其中进行导入和导出。

  • 步骤3;

    在程序中放置一个按钮或某种控件来启动导入/导出。例如,我有一个按钮,当单击该按钮时,要求用户确认他们想要导入一个新数据库并覆盖现有数据库。如果是,请在新生成的imports类中调用执行此操作的函数。

  • 步骤4;

    现在你知道如何设置了,代码会像一样

    Public Function importdatabase(/connections go in here/)
    Declare transaction
    Create sql variable
    Try 
      Begin the transaction here
    sql to delete the data from one table
    sql to select all data from database that is being imported
    For loop to iterate over each record in the database table
    Declare a variable for each field in the database
    variable1 = ("fieldname1")
    variable2 = ("fieldname2")
    sql statement to insert the new values
    call to the function which runs the sql query
    Next
    commit transaction
    Catch ex As Exception
    Throw
    End Try
    
  • 步骤5;对每个数据库表重复删除/插入过程

除此之外,我还有其他功能。

一个函数创建了一个新的数据表,它被引用为For each dr as datarow in /functionname(parameters).Rows

下一步是执行sql语句(不需要,任何执行它的命令都可以)

下一个用于参数化我的SQL查询

剩下的就是用空字符串、设置日期等替换数据库中的空值。

您可以使用以下类导入访问sql server的表。

您需要:-源(包括访问文件名)和目标的连接字符串。-源表,目标tatble(如果为空,则与源表相同)

Class ImportHelper
'modify connectionstring as needed
Public Property SourceConnectionString() As String
    Get
        Return m_SourceConnectionString
    End Get
    Set
        m_SourceConnectionString = Value
    End Set
End Property
Private m_SourceConnectionString As String
Public Property DestinationConnectionString() As String
    Get
        Return m_DestinationConnectionString
    End Get
    Set
        m_DestinationConnectionString = Value
    End Set
End Property
Private m_DestinationConnectionString As String
Public Sub New(sourceConnectionString__1 As String, destinationConnectionString__2 As String)
    SourceConnectionString = sourceConnectionString__1
    DestinationConnectionString = destinationConnectionString__2
End Sub
Public Sub Import(sourceTable As String, Optional targetTable As String = Nothing)
    Using sourceConnection = New OleDbConnection(SourceConnectionString)
        If String.IsNullOrEmpty(targetTable) Then
            targetTable = sourceTable
        End If
        sourceConnection.Open()
        ' Perform an initial count on the destination table.
        Dim commandRowCount = New OleDbCommand(Convert.ToString("SELECT COUNT(*) FROM ") & sourceTable, sourceConnection)
        Dim countStart As Long = Convert.ToInt32(commandRowCount.ExecuteScalar())
        Console.WriteLine("Source Table [{0}] has {1} rows", sourceTable, countStart)
        ' Get data from the source table  
        Dim commandSourceData = New OleDbCommand(Convert.ToString("SELECT * FROM ") & sourceTable, sourceConnection)
        Dim reader = commandSourceData.ExecuteReader()
        '---------------
        Using destinationConnection As New SqlConnection(DestinationConnectionString)
            destinationConnection.Open()
            Using bulkCopy As New SqlBulkCopy(destinationConnection)
                bulkCopy.DestinationTableName = targetTable
                Try
                    ' Write from the source to the destination.
                    bulkCopy.WriteToServer(reader)
                    Console.WriteLine(Convert.ToString("Sucess Importing ") & sourceTable)
                Catch ex As Exception
                    Console.WriteLine(ex.Message)
                Finally
                    reader.Close()
                End Try
                'using
            End Using
            'using
        End Using
    End Using
    'using
 End Sub
End Class

如何使用:

Private Sub Test()
    'modify connectionstring as needed
    'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:mydatabase.mdb;User Id=admin;Password=; //access 97..2000
    Dim SourceConnectionString As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:tempdatabase1.accdb;Persist Security Info=False;"
    Dim DestinationConnectionString As String = "Data Source=xxxx;Initial Catalog=test;user=xxx;password=xxx;"
    New ImportHelper(SourceConnectionString, DestinationConnectionString).Import("table1", "test1")
End Sub

最新更新