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

25 篇文章 1 订阅
5 篇文章 0 订阅

将 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中即为将“索引”一项设为“有(无重复)”

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值