使用dataadapter.update时,列是否需要完全匹配

时间:2013-12-10 00:02:53

标签: vb.net ado.net

我正在开发一个项目,用于将数据从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数据库不接收数据的任何想法。

1 个答案:

答案 0 :(得分:1)

我认为问题是当你在DataAdapter上调用Update时,destDt中的行没有RowState.Added ...你可以检查Update语句的返回值...我猜它会是0因为没有执行插入...你可以使用sql server profiler来检查...

作为解决方法,您可以在destDT中的行上调用DataRow.SetAdded()...