”对于不返回任何键列信息的 SelectCommand,不支持 UpdateCommand 的动态 SQL 生成“解决办法

来源:互联网 发布:域名后缀排行榜 编辑:程序博客网 时间:2024/06/10 03:27

将 DataTable 更新到数据库,编写以下函数。

public void UpdateTable(DataTable pDataTable){String strSQL = "SELECT * FROM " + pDataTable.TableName;OleDbDataAdapter pOleDbDataAdapter = new OleDbDataAdapter(strSQL, DbConnection);OleDbCommandBuilder pOleDbCommandBuilder = new OleDbCommandBuilder(pOleDbDataAdapter);pOleDbDataAdapter.UpdateCommand = pOleDbCommandBuilder.GetUpdateCommand(); // 此处出错pOleDbDataAdapter.Update(pDataTable);}


在 pOleDbCommandBuilder.GetUpdateCommand() 时出错,

错误信息为“对于不返回任何键列信息的 SelectCommand,不支持 UpdateCommand 的动态 SQL 生成”。


在网上查了一下,原因是由于表没有设置主键,一般的解决办法是将某个字段,比如ID设为主键即可。

但 ArcGIS 生成的 Personal Geodatabase Access数据库中的表并没有设置主键,却可以正常执行以上的代码。

新建了一个表仔细对比了一下,原来将“索引”一项设为“有(无重复)”,也可以解决问题。


至此,有两个解决办法:

1. 给表设置主键字段

2. 给表设置唯一值字段,在ACCESS中即为将“索引”一项设为“有(无重复)”