对于不返回任何键列信息的 SelectCommand 不支持 UpdateCommand 的动态 SQL 生成

chenquan0818 2010-09-15 05:01:01
对于不返回任何键列信息的 SelectCommand 不支持 UpdateCommand 的动态 SQL 生成
1.我数据库有主键 应该不是主键的事 (主键是gcqxid)


sql = " select gcqxid,gcqx_sccs, gcqx_bgrq, gcqx_bz, gcqx_zch, gcqx_scdw, gcqx_dz, gcqx_yb, gcqx_cpmc, gcqx_cpbz, gcqx_cpxnjg, gcqx_yxq, gcqx_pzrq, gcqx_cpsyfw, gcqx_ggxh, gcqx_status, gcqx_sdate, gcqx_fj, gcqx_r_sccs, gcqxcode, gcqx_r_bgrq, gcqx_r_bz, gcqx_r_zch, gcqx_r_scdw, gcqx_r_dz, gcqx_r_yb, gcqx_r_cpmc, gcqx_r_cpbz, gcqx_r_cpxnjg, gcqx_r_yxq, gcqx_r_pzrq, gcqx_r_cpsyfw, gcqx_r_ggxh, gcqx_r_fj, gcqx_sfdaid from occobj_gcqx where gcqx_sdate='" + sdate + "' and gcqx_status>-1 ";
oleDbDataAdapter da1 = new OleDbDataAdapter(sql, oleconn);
da1.Fill(ds_data, "target");

DataColumn[] pk= new DataColumn[1];
pk[0]=ds_data.Tables["target"].Columns["gcqxid"];
ds_data.Tables["target"].PrimaryKey = pk;

sql = " select a.gcqxid as 数据ID,a.gcqx_sfdaid as 药监局ID,a.gcqx_sccs as 生产场所, a.gcqx_bgrq as 变更日期, a.gcqx_bz as 备注, a.gcqx_zch as 注册号, a.gcqx_scdw as 生产单位, a.gcqx_dz as 地址, a.gcqx_yb as 邮编, a.gcqx_cpmc as 产品名称, a.gcqx_cpbz as 产品标准, a.gcqx_cpxnjg as 产品性能结构及组成, a.gcqx_yxq as 有效期, a.gcqx_pzrq as 批准日期, a.gcqx_cpsyfw as 产品适用范围, a.gcqx_ggxh as 规格型号, a.gcqx_fj as 附件,a.gcqx_sdate as 数据日期 from occobj_gcqx a, data_manipulation_log b where a.gcqx_sfdaid =b.dataid and b.operatetable='occobj_gcqx' and b.operate=1 and " + db_date;



OleDbDataAdapter da = new OleDbDataAdapter(sql, oleconn);

da.Fill(ds_data2, "source");

arrRows = ds_data2.Tables["source"].Select();
foreach (DataRow row in arrRows)
{
arrRows2 = ds_data.Tables["target"].Select("gcqxid=" + row["数据ID"] + "");
foreach (DataRow row2 in arrRows2)
{


row2["gcqx_R_SCCS"] = row["生产场所"];
row2["gcqx_R_BGRQ"] = row["变更日期"];
row2["gcqx_R_BZ"] = row["备注"];
row2["gcqx_R_ZCH"] = row["注册号"];
row2["gcqx_R_SCDW"] = row["生产单位"];
row2["gcqx_R_DZ"] = row["地址"];
row2["gcqx_R_YB"] = row["邮编"];
row2["gcqx_R_CPMC"] = row["产品名称"];
row2["gcqx_R_CPBZ"] = row["产品标准"];
row2["gcqx_R_CPXNJG"] = row["产品性能结构及组成"];
row2["gcqx_R_YXQ"] = row["有效期"];
row2["gcqx_R_PZRQ"] = row["批准日期"];
row2["gcqx_R_CPSYFW"] = row["产品适用范围"];
row2["gcqx_R_GGXH"] = row["规格型号"];
row2["gcqx_R_FJ"] = row["附件"];






}

}


OleDbCommandBuilder src_commandBuilder = new OleDbCommandBuilder(da1);


da1.Update(ds_data, "target");





最后报错 对于不返回任何键列信息的 SelectCommand 不支持 UpdateCommand 的动态 SQL 生成
...全文
270 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
chenquan0818 2010-09-15
  • 打赏
  • 举报
回复
求各位大大给我看看
chenquan0818 2010-09-15
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 chokochu 的回复:]
这句有问题:
sql = " select a.gcqxid as 数据ID,a.gcqx_sfdaid as 药监局ID,a.gcqx_sccs as 生产场所, a.gcqx_bgrq as ....
你在select的时候改变了列名,所以OleDbCommandBuilder 无法为你生成相应的UpdateCommand
要主意以下几点:
SelectCommand 中必须要选出主……
[/Quote]

后面的SQL 是放在别的DATATABLE里的

而我的SQL是第一个SQL
chokochu 2010-09-15
  • 打赏
  • 举报
回复
这句有问题:
sql = " select a.gcqxid as 数据ID,a.gcqx_sfdaid as 药监局ID,a.gcqx_sccs as 生产场所, a.gcqx_bgrq as ....
你在select的时候改变了列名,所以OleDbCommandBuilder 无法为你生成相应的UpdateCommand
要主意以下几点:
SelectCommand 中必须要选出主键
OleDbCommandBuilder 是否支持多表查询尚不清楚

111,129

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧