DataTable数据更新到数据库问题

nightmaple 2010-11-26 09:13:10
添加一个名为Detail的一个空表DataTable到DataSet,通过getPackListDet存储过程得到数据,一条一条添加到Detail中,
添加的行状态都为Added,通过SqlDataAdapter批量更新到数据库。查询数据库发现数据未添加成功。

                ds.Tables.Add(CPublicDB.CDBHelper.GetDBInstance.GetDataTableDirectly("select * from PackListDet where PackBoxNo=''", "Detail"));
DataTable dt = CPublicDB.CDBHelper.GetDBInstance.GetDataTableDirectly("exec getPackListDet '" + this.txtPackNo.Text + "'");
foreach (DataRow dr in dt.Rows)
{
object[] objs = new object[13];
objs[0] = 0;
objs[1] = dr["PackListNo"].ToString();
objs[2] = dr["CtnId"].ToString();
objs[3] = dr["FrCtn"].ToString();
objs[4] = dr["ToCtn"].ToString();
objs[5] = dr["CtnQty"].ToString();
objs[6] = dr["StyleNo"].ToString();
objs[7] = dr["StyleNo"].ToString();
objs[8] = dr["Color"].ToString();
objs[9] = dr["Sizes"].ToString();
objs[10] = dr["SizeSeq"].ToString();
objs[11] = dr["Qty"].ToString();
objs[12] = "";
ds.Tables["Detail"].Rows.Add(objs);
}


        public bool ExecuteBatchCommandBySQL(DataTable dt, string sSelectSql)
{
OpenCon();
SqlDataAdapter sd = new SqlDataAdapter();
sd.SelectCommand = new SqlCommand(sSelectSql, con);
SqlCommandBuilder scb = new SqlCommandBuilder(sd);
try
{
lock (this)
{
sd.Update(dt);
}
}
catch (Exception ex)
{
throw ex;
}
return true;
//return ds; //数据集的行状态在更新后会都变为: UnChange,在这次更新后客户端要用返回的ds
}


                if (CPublicDB.CDBHelper.GetDBInstance.ExecuteBatchCommandBySQL(ds.Tables["Detail"], "select * from PackListDet"))
{
MessageBox.Show("保存成功!");
}
else
MessageBox.Show("保存失败!");
...全文
186 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
lian_lin 2010-11-26
  • 打赏
  • 举报
回复
打个断点 跟踪一下咯!
nightmaple 2010-11-26
  • 打赏
  • 举报
回复
谢谢大家的回复,上面问题已经解决了,是我太粗心在将数据加入表Detail时将主键值弄错了。

我还一个问题一直没解决,请大家帮忙看看。

http://topic.csdn.net/u/20101111/11/9cc8cbcc-0088-47c4-90cb-ebebd872b855.html
zjx198934 2010-11-26
  • 打赏
  • 举报
回复

foreach (DataRow dr in dt.Rows)
{
DataRow newDr = ds.Tables["Detail"].NewRow();
newDr["PackListNo"] = dr["PackListNo"].ToString();
newDr["CtnId"] = dr["CtnId"].ToString();
.....同上
ds.Tables["Detail"].Rows.Add(newDr);
}



试试上面!
nightmaple 2010-11-26
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 changling_wang 的回复:]
在sql查询分析器里面跑下你的存储过程,看看有没有错先~!
[/Quote]

存储过程只是用来查询数据,是没问题的;
数据可以查出来并在DataGridView中显示,保存后就一条都没去数据库。

sd.Update(dt);这一句返回的是0
Return门徒 2010-11-26
  • 打赏
  • 举报
回复
在sql查询分析器里面跑下你的存储过程,看看有没有错先~!

111,092

社区成员

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

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

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