2010-11-16 75 views
0

我需要通过我通过互联网接收的XML文件在.NET中复制MS Access数据库。目标数据库必须与原始数据库(相同的内容和相同的PK)完全相同。使用OleDbDataAdapter插入自动编号

由于我有很多要复制的表,我使用OleDbDataAdapter为我生成插入查询。即使对于具有自动生成的Guid作为主键的表,这也可以很好地工作。由OleDbCommandBuilder(cmdBuilder.GetInsertCommand())生成的INSERT命令在其参数中具有Guid字段,因此插入的guid与源数据库相同。

我唯一的问题是有自动编号整数作为主键的表。生成的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 [整数/自动编号]
REPORTNAME [文字]
REPORTTYPE [文字]

插入命令生成2参数:ReportName和ReportType

谢谢

回答

0

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

+0

有没有更好的解决方案?我有80个表格可以插入,这样就可以写出很多查询。 – 2010-11-16 19:08:09

+0

@AlexB:你可以尝试修改生成的'insertCommand'的'CommandText'和'Parameters'。 – SLaks 2010-11-16 19:09:43

+0

我可以但我没有办法知道当前表是否有一个自动编号字段(请记住我有80个表插入)。 'DataSet.Tables [0] .Columns [“IdReport”]。AutoIncrement'返回false和'DataSet.Tables [0] .Columns [“IdReport”]。AllowDbNull'为我的AutoNumber列返回true。我想这是为了让服务器插入正确的值。 – 2010-11-16 19:24:43