我需要使用VB.NET程序将数据从一个数据库复制到另一个数据库。 目标数据库是SQL Server,源数据库是一些专有的ODBC兼容数据库。
我需要遍历要复制的表列表。从给定的修改日期读取源数据库表中的数据。从目标数据库表中删除相应的日期,并插入源表中的记录。数据库具有相同的结构,即表名和字段名,但数据类型可能不同(但它们是兼容的,例如,源代码为double,目标为float)。没有主键。
以下我怎么做:
首先对目标执行删除命令。 然后我可以使用DataReader从源获取数据,遍历Items并为每一行创建一个Insert Command。使用适当的值向命令添加参数并执行。并将整个事情包装在一个交易中。
我只是想知道我是否在这里错过了一招。任何建议
答案 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
首先检查所有表格