【问题标题】:Copy data from one database to another using VB.NET使用 VB.NET 将数据从一个数据库复制到另一个数据库
【发布时间】:2010-02-01 18:36:35
【问题描述】:

我需要使用 VB.NET 程序将数据从一个数据库复制到另一个数据库。 目标数据库是 SQL Server,源数据库是一些专有的 ODBC 兼容数据库。

我需要遍历要复制的表列表。从给定修改日期的源数据库表中读取数据。从目标数据库表中删除相应的日期,并从源表中插入记录。数据库具有相同的结构,即表名和字段名,但数据类型可能不同(但它们是兼容的,例如源中的双精度,目标中的浮点数)。不存在主键。

我可以这样做:

首先对目标执行删除命令。 然后我可以使用 DataReader 从源中获取数据,遍历 Items 并为每一行创建一个插入命令。使用适当的值将参数添加到命令并执行。并将整个事情包装在一个事务中。

我只是想知道我是否在这里遗漏了一个技巧。任何建议

【问题讨论】:

    标签: sql-server vb.net ado.net


    【解决方案1】:

    我认为你应该使用正确的工作,我猜在这种情况下这就是 SSIS,但我可能是错的,也许你已经探索了这条路。

    在这种情况下,是的,数据读取器会根据您拥有的数据量来做。数据表甚至可能更容易和更快地编程(无需担心数据类型,因为适配器应该负责。

    【讨论】:

    • 我同意 chrissie 的观点——你应该使用 SSIS 来执行 ETL,而不是使用自定义的 vb.net 应用程序。它更快,一旦你掌握了 ui 的窍门,就会更简单、更容易维护:msdn.microsoft.com/en-us/library/ms141026.aspx
    • 谢谢,SSIS 不是一个选项,所以它必须是 VB。为了增加这个问题,我可以通过数据适配器从源获取数据表吗?以某种方式将此数据表重新附加到另一个数据适配器并更新目标。
    • 除非他需要任何花哨的转换任务,否则您可能只需在 SQL 作业和存储过程中完成所有这些工作。当您可以使用普通的旧 T-SQL 时,许多人会跳到 SSIS。
    【解决方案2】:

    诀窍是使用基于集合的操作,而不是我们程序员最初被教导的“一次一行”的概念:)

    这是一些伪代码

    INSERT INTO DestTable (columns, columns...)
    (Select ModifiedRow from SourceTable where date = Modified)
    

    也许您的要求更复杂,可能需要逐行的方法,但通常情况并非如此。

    我会选择将此代码放在作业步骤中并在 SQL 上安排。它也可以是从 .net 运行的存储过程。

    此外,使用 SSIS 进行 db 到 db 传输很可能是矫枉过正,除非您打算使用其中的一些特殊转换。

    【讨论】:

      【解决方案3】:

      看看SqlBulkCopy class。如果您可以将源放入 DataTable 或使用 IDataReader 读取它,那么它是合格的。它还将尝试在兼容类型之间进行转换。详情请见Single Bulk Copy Operations

      这比对每一行使用 INSERT 语句更可取。

      【讨论】:

        【解决方案4】:
        Dim reader As System.IO.DirectoryInfo
                reader = My.Computer.FileSystem.GetDirectoryInfo("c:\program Files\Microsoft SQL Server\MSSQL.1\mssql\data")
                If (reader.Attributes And System.IO.FileAttributes.ReadOnly) > 0 Then
                    MsgBox("File is readonly!")
                Else
                    MsgBox("Database is not read-only protected")
                End If
        

        先检查所有表格

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-04-06
          • 1970-01-01
          • 1970-01-01
          • 2021-08-08
          • 1970-01-01
          • 2018-12-01
          • 1970-01-01
          相关资源
          最近更新 更多