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
谢谢
有没有更好的解决方案?我有80个表格可以插入,这样就可以写出很多查询。 – 2010-11-16 19:08:09
@AlexB:你可以尝试修改生成的'insertCommand'的'CommandText'和'Parameters'。 – SLaks 2010-11-16 19:09:43
我可以但我没有办法知道当前表是否有一个自动编号字段(请记住我有80个表插入)。 'DataSet.Tables [0] .Columns [“IdReport”]。AutoIncrement'返回false和'DataSet.Tables [0] .Columns [“IdReport”]。AllowDbNull'为我的AutoNumber列返回true。我想这是为了让服务器插入正确的值。 – 2010-11-16 19:24:43