我的datatable 的select 语句是连接 2 个表,但是我只想更新其中一个,可以实现吗?
------------------------------------------------------------------------------------
我取记录时,要连接两个表 a 和 b, 其中a表,是需要用户编辑并更新的表,可是b表只是为了取字段(在这里是通过与a表关联取到员工的部门信息,因为a表没有存贮员工的部门编码,我要通过员工编号关联到b表的部门编码),
我不想对b表进行更新,只想更新a表中的部分字段,但是更新时,提示:
对于多个基表不支持动态SQL生成我估计就是因为,我的 select 语句中连接了两个表的原因
但是我的本意是只更新一个表呀,
我能不能设定哪些字段可以更新呢?
以下是我的函数代码,大家参考一下,也好明白我的问题 //查询公积金(返回结果集允许编辑)
public int GetGjjRecord(string yf, string bm, out DataTable datatable1,out SqlDataAdapter da)
{
string strsql = "select a.autoid,a.月份,b.部门,a.公积金编号,a.编号,a.姓名,a.序号,a.存取方式编码,a.存取方式名称,a.存入,a.支取,a.公积金,a.备注,a.制单人,a.制单人姓名,a.审核人,a.审核人姓名,a.制单时间,a.审核时间 ";
strsql += "from 公积金明细 a left join gzda b on (a.编号=b.编号) where a.记录标志 <> 0 and a.月份='"+yf +"' ";
if (bm=="**")
{
strsql+=" order by b.部门,a.编号";
}
else if (bm == "##")
{
strsql += "and isnull(b.部门,'')='' order by b.部门,a.编号";
}
else
{
strsql += "and b.部门='" + bm + "' order by b.部门,a.编号";
} dt = new DataTable();
da = new SqlDataAdapter(strsql, mydb.conn);
scb = new SqlCommandBuilder(da);
da.Fill(dt);
datatable1 = dt;
return 0;
}
------------------------------------------------------------------------------------
我取记录时,要连接两个表 a 和 b, 其中a表,是需要用户编辑并更新的表,可是b表只是为了取字段(在这里是通过与a表关联取到员工的部门信息,因为a表没有存贮员工的部门编码,我要通过员工编号关联到b表的部门编码),
我不想对b表进行更新,只想更新a表中的部分字段,但是更新时,提示:
对于多个基表不支持动态SQL生成我估计就是因为,我的 select 语句中连接了两个表的原因
但是我的本意是只更新一个表呀,
我能不能设定哪些字段可以更新呢?
以下是我的函数代码,大家参考一下,也好明白我的问题 //查询公积金(返回结果集允许编辑)
public int GetGjjRecord(string yf, string bm, out DataTable datatable1,out SqlDataAdapter da)
{
string strsql = "select a.autoid,a.月份,b.部门,a.公积金编号,a.编号,a.姓名,a.序号,a.存取方式编码,a.存取方式名称,a.存入,a.支取,a.公积金,a.备注,a.制单人,a.制单人姓名,a.审核人,a.审核人姓名,a.制单时间,a.审核时间 ";
strsql += "from 公积金明细 a left join gzda b on (a.编号=b.编号) where a.记录标志 <> 0 and a.月份='"+yf +"' ";
if (bm=="**")
{
strsql+=" order by b.部门,a.编号";
}
else if (bm == "##")
{
strsql += "and isnull(b.部门,'')='' order by b.部门,a.编号";
}
else
{
strsql += "and b.部门='" + bm + "' order by b.部门,a.编号";
} dt = new DataTable();
da = new SqlDataAdapter(strsql, mydb.conn);
scb = new SqlCommandBuilder(da);
da.Fill(dt);
datatable1 = dt;
return 0;
}
查询语句虽然很恶心,但没注意到哪里有问题。在 dt = new DataTable(); 前面加个断点。 看看 strsql 最后生成的 字符串,拿去数据库中 执行一下,看看对不对。
将数据更新后,再利用DataSet做更新(要有主键)可使用如"Select * From TableA where 0=1",表名宜与数据库中的表名一致然后对数据源修改后再更新
然后点下更新按钮,更新到后台数据库。我已经试了,如果 select 语句中只有一个表,完全没有问题可以更新成功,但是如果有两个表,就无法更新,
原因就是更新语句不能用sqlcommandbuilder 类来构造,自动构造不出来,提示:对于多个基表不支持动态SQL生成
所以我想手动构造 更新语句,不知如何构造