繁体   English   中英

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

[英]Do columns need to match exactly when using dataadapter.update

我正在一个项目中,将数据从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

然后,我使用以下方式更改数据表的名称:

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数据库无法接收数据。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM