将 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);
}
错误信息为“对于不返回任何键列信息的 SelectCommand,不支持 UpdateCommand 的动态 SQL 生成”。
在网上查了一下,原因是由于表没有设置主键,一般的解决办法是将某个字段,比如ID设为主键即可。
但 ArcGIS 生成的 Personal Geodatabase Access数据库中的表并没有设置主键,却可以正常执行以上的代码。
新建了一个表仔细对比了一下,原来将“索引”一项设为“有(无重复)”,也可以解决问题。
至此,有两个解决办法:
1. 给表设置主键字段
2. 给表设置唯一值字段,在ACCESS中即为将“索引”一项设为“有(无重复)”