【问题标题】:AutoNumber insertion with OleDbDataAdapter使用 OleDbDataAdapter 插入自动编号
【发布时间】:2010-11-17 03:02:53
【问题描述】:

我需要通过我通过 Internet 接收的 XML 文件在 .NET 中复制 MS Access 数据库。目标数据库必须与原始数据库完全相同(相同的内容和相同的 PK)。

因为我有很多表要复制,所以我使用 OleDbDataAdapter 为我生成插入查询。这很有效,即使对于将自动生成的 Guid 作为其主键的表也是如此。 OleDbCommandBuilder (cmdBuilder.GetInsertCommand()) 生成的 INSERT 命令的参数中有 Guid 字段,因此插入的 guid 与源 DB 相同。

我遇到的唯一问题是使用自动编号整数作为主键的表。生成的INSERT命令不包含PK字段,所以当序列有空洞时,插入的个数与源数据库不匹配。

在生成插入命令时,是否有隐藏在某处包含自动编号列的属性?

这是我的代码:

public void InsertContentFromXml(string tableName, string xml)  
{  
   using (OleDbDataAdapter adapter = new OleDbDataAdapter("SELECT * FROM [" + tableName + "]", _connection))
   {  
      OleDbCommandBuilder builder = new OleDbCommandBuilder(adapter);  
      OleDbCommand insertCommand = builder.GetInsertCommand();  
      // insertCommand does not have the autonumber column in its insert query  
   }  
}

该表有 3 个字段:
IdReport [整数/自动编号]
报告名称 [文本]
报告类型 [文本]

insert 命令生成 2 个参数:ReportName 和 ReportType

谢谢

【问题讨论】:

    标签: c# ms-access oledb


    【解决方案1】:

    您需要自己创建INSERT 命令及其参数。

    【讨论】:

    • 没有更好的解决方案吗?我有大约 80 个表要插入,所以要编写很多查询。
    • @AlexB:你可以尝试修改生成的insertCommandCommandTextParameters
    • 我可以,但我无法知道当前表是否有自动编号字段(请记住我有大约 80 个表要插入)。 DataSet.Tables[0].Columns["IdReport"].AutoIncrement 返回 false,DataSet.Tables[0].Columns["IdReport"].AllowDbNull 为我的 AutoNumber 列返回 true。我想这是让服务器插入正确的值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-22
    • 2017-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多