这样写...,为什么不能把DataTable 中的数据用UpDate中的数据一次性的写入数据库??(在线等待)

时间:2022-10-07 16:17:04
public void  InsertData(string PtableName,DataTable MyTable)
{
string SqlStr="select BarCode,ModuleCode,InStoreTime,InManCode,OutStoreTime,OutManCode,UserName from "+PtableName;

SqlDataAdapter MyDataAdapter=new SqlDataAdapter (SqlStr,CommConnection);

SqlCommandBuilder Mycmdbuilder=new SqlCommandBuilder (MyDataAdapter);

DataSet MyDataSet=new DataSet ();
            
MyDataSet.Tables.Add (MyTable);

MyDataAdapter.Fill (MyDataSet,PtableName);

SqlTransaction MyTrans;
MyTrans=CommConnection.BeginTransaction ();

try
{
MyDataAdapter.Update (MyDataSet);

MyTrans.Commit ();
}
catch(Exception err)
{
MyTrans.Rollback ();
MessageBox.Show (err.Message.ToString ());
}
}

13 个解决方案

#1


表中有主键吗?

#2


MyDataAdapter.Update (MyDataSet);
要加上表名!

#3


你是想把DataSet中的所有表都更新吧。

#4


MyDataAdapter.Update (MyDataSet, MyTable.TableName);

#5


加上表名是不会出错了,但是没有插入任何数据,怎样在update之前看看dataset中有没有数据压??

#6


不要指望SqlCommandBuilder会为你完成所有的事,还是自己写sqlupdatecommond吧。

#7


很有意思,帮你顶

#8


要update成功﹐記錄行的狀態(ROWSTATE)不能是UNCHANGED.
MyDataSet.Tables.Add (MyTable);此行代碼執行后﹐在原MYDATASET中MYTABLE表中的數據行的狀態是UNCHANGED。
可用DEBUG調試。

#9


http://blog.csdn.net/zhzuo/archive/2004/08/06/67037.aspx

#10


同意  ltginprise(ltg) , 你应该在新建的dataset里新建一个表,然后把传入那个表的记录插入到新表中

#11


........
MyDataSet.Tables.Add (MyTable);
只要設置你取得MyTable內容的DATAADAPTER :
da.AcceptChangesDuringFill = false就能合并成功。

#12


还是不行呀,郁闷中,哪位大哥做过类似的操作阿,能不能贴点代码参考一下,现在就卡在这里了,谢谢先。

#13


Maybe u mistake in  Transaction, reference blow & try again:
DataTable tbl = new DataTable();
OleDbConnection cn = new OleDbConnection(strConn);
OleDbDataAdapter da = new OleDbDataAdapter(strSQL, cn);
OleDbCommandBuilder cb = new OleDbCommandBuilder(da);
cn.Open();
cb.GetUpdateCommand();
da.Fill(tbl);
OleDbTransaction txn = cn.BeginTransaction();
cb.GetUpdateCommand().Transaction = txn;
cb.GetInsertCommand().Transaction = txn;
cb.GetDeleteCommand().Transaction = txn;
da.Update(tbl);
txn.Commit();
cn.Close();

#1


表中有主键吗?

#2


MyDataAdapter.Update (MyDataSet);
要加上表名!

#3


你是想把DataSet中的所有表都更新吧。

#4


MyDataAdapter.Update (MyDataSet, MyTable.TableName);

#5


加上表名是不会出错了,但是没有插入任何数据,怎样在update之前看看dataset中有没有数据压??

#6


不要指望SqlCommandBuilder会为你完成所有的事,还是自己写sqlupdatecommond吧。

#7


很有意思,帮你顶

#8


要update成功﹐記錄行的狀態(ROWSTATE)不能是UNCHANGED.
MyDataSet.Tables.Add (MyTable);此行代碼執行后﹐在原MYDATASET中MYTABLE表中的數據行的狀態是UNCHANGED。
可用DEBUG調試。

#9


http://blog.csdn.net/zhzuo/archive/2004/08/06/67037.aspx

#10


同意  ltginprise(ltg) , 你应该在新建的dataset里新建一个表,然后把传入那个表的记录插入到新表中

#11


........
MyDataSet.Tables.Add (MyTable);
只要設置你取得MyTable內容的DATAADAPTER :
da.AcceptChangesDuringFill = false就能合并成功。

#12


还是不行呀,郁闷中,哪位大哥做过类似的操作阿,能不能贴点代码参考一下,现在就卡在这里了,谢谢先。

#13


Maybe u mistake in  Transaction, reference blow & try again:
DataTable tbl = new DataTable();
OleDbConnection cn = new OleDbConnection(strConn);
OleDbDataAdapter da = new OleDbDataAdapter(strSQL, cn);
OleDbCommandBuilder cb = new OleDbCommandBuilder(da);
cn.Open();
cb.GetUpdateCommand();
da.Fill(tbl);
OleDbTransaction txn = cn.BeginTransaction();
cb.GetUpdateCommand().Transaction = txn;
cb.GetInsertCommand().Transaction = txn;
cb.GetDeleteCommand().Transaction = txn;
da.Update(tbl);
txn.Commit();
cn.Close();