我正在开发一个项目,用于将数据从Microsoft Access数据库导入空白的MS-SQL数据库。 Access(VM)中表的结构与MS-SQL(vlVerticalMarketing)中的表完全不匹配。
AccessTable VM SQLTable vlVerticalMarketing
ID (autonumber) VMID (PK, identity)
VM VerticalMarketing
Deleted (required)
Archive (required)
Other non-required fields
我使用以下查询将Access数据填充到DataTable DT中:
select VM as VerticalMarketing, 0 as Deleted, 0 as Archive from VM where VM is not null
然后我使用以下命令更改DataTable的名称:
DT.TableName = "vlVerticalMarketing"
从那里,我将DataTable传递给一个类函数。
Public Function CopyFromDataTable(ByVal sourceDT As DataTable, ByVal TableName As String) As Boolean
Try
OpenDB()
Dim DA As New SqlDataAdapter("select VerticalMarketing, Deleted, Archive from " & TableName, Me.DBConn)
Dim CB = New SqlCommandBuilder(DA)
CB.QuotePrefix = "["
CB.QuoteSuffix = "]"
DA.InsertCommand = CB.GetInsertCommand(True)
Dim destDT = sourceDT.Copy()
DA.Update(destDT)
OpenDB是一种我用于其他事情的类方法,我知道这很好。它设置连接字符串并将DBConn创建为SqlConnection对象。其余的是标准的VB.Net。一切都运行没有错误。 sourceDT和destDT都包含数据(在调试时通过DataSet Visualizer查看)。问题是没有数据传递给SQL数据库。
关于我做错了什么导致SQL数据库不接收数据的任何想法。
答案 0 :(得分:1)
我认为问题是当你在DataAdapter上调用Update时,destDt中的行没有RowState.Added ...你可以检查Update语句的返回值...我猜它会是0因为没有执行插入...你可以使用sql server profiler来检查...
作为解决方法,您可以在destDT中的行上调用DataRow.SetAdded()...