使用VB.NET将数据从一个数据库复制到另一个数据库

时间:2010-02-01 18:36:36

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

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

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

以下我怎么做:

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

我只是想知道我是否在这里错过了一招。任何建议

4 个答案:

答案 0 :(得分:2)

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

在这种情况下,是的,datareader会显示您拥有的数据量。数据表甚至可能更易于编程和更快(无需担心数据类型,因为适配器应该处理它。

答案 1 :(得分:0)

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

这是一些伪代码

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

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

我选择将此代码放入作业步骤并安排SQL。它也可以是从.net。

运行的存储过程

此外,使用SSIS进行db to db传输很可能是过度杀伤,除非你打算在那里使用一些特殊的转换。

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

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

首先检查所有表格