如果从一个数据源得到的datatable,可以很方便地通过update()更新数据库,但是从一个已经有数据记录的dataTable怎么去更新数据库呢?
解决方案 »
- C#中如何引用C++中的Union
- 请教:如何取得Graphics重绘后的PictureBox里的图片大小?
- DataTable清除数据后重新添加数据的困惑.
- [100分提问]客户端和服务器端Oracle使用的字符集相同,但是开发工具的字符集不同,结果造成数据乱码
- 各位大侠 我想从vb.net转到c#, 我应该看看那些书,
- 重载方法(OnPaint())在窗体中用Draw方法绘制一个对象(如椭圆),当改变窗体大小时,如何清除窗体,重新绘制???
- C# XML类 无法解析XML字符串。求教大神!求教SP1234
- 基本知识,循环的灵活使用~~~
- 在使用Process p = new Process();时,要引入哪一个文件?应该怎么引入呢?
- WinForm里面这样的边框是怎么实现的?
- 无法运行或安装发布好的程序,提示全局程序缓存(GAC)中安装程序集office版本12.0
- c#怎么才能把显示的速度值改为电压值。。。。。大侠们给点建议。。。
例
con=new SqlConnection(sConStr);
SqlCommand cmd=new SqlCommand("Select * from systemlog Where id is null",con);
ad=new SqlDataAdapter(cmd);
SqlCommandBuilder bd=new SqlCommandBuilder(ad);
ad.InsertCommand=bd.GetInsertCommand();
tb=new DataTable();
ad.Fill(tb);
row=tb.NewRow();
tb.Rows.Add(row);
row["UserName"]="aaa";
row["Attemp_Login_Time"]=DateTime.Now;
ad.Update(tb);
tb.AcceptChanges();
例子中只是加入一行,如果datatable中存在有删除或修改的记录呢? 另外:解释一下ad.InsertCommand=bd.GetInsertCommand(); 的含义
道理是一样的.还可以用sqldataadapter.update去更新.你只要把datatable的行状态搞对了就行.例如行状态是Added那你dataadapter.update就会去insert
当然你的sqldataadapter要配置insert语句.
或是可以用SqlCommandBuilder帮你生成sql语句.
StringBuilder strTemp = new StringBuilder();//存放插入数据
StringBuilder bdUpdate = new StringBuilder();//存放更新数据
//每行记录
for(int j = 0;j < ds.Tables["dt名称"].Rows.Count; j++)
{
strTemp.Remove(0,strTemp.Length);
bdUpdate.Remove(0,bdUpdate.Length);
//列
for(int s = 0; s < ds.Tables["dt名称"].Columns.Count; s++)
{
//每列数据
strTemp.Append(ByType(ds.Tables["dt名称"].Rows[j][s]));
strTemp.Append(" ,");
bdUpdate.Append(ds.Tables["dt名称"].Columns[s].ColumnName + "=" + ds.Tables["dt名称"].Rows[j][s]));
bdUpdate.Append(" ,");
}
strTemp.Remove(strTemp.Length-1,1);
bdUpdate.Remove(bdUpdate.Length-1,1);
sqlServer = "update "+ 表名字段变量 +" set " + bdUpdate.ToString()+" where pkid=" + 主键变量;
{
dr.SetAdded();//.net2.0中才有此方法
}
我可以遍历这个DataTable把他的行状态调整为Added,这样dataadapter.update(dt);就会去执行insert语句插入数据到表中了:)
(也就是myDataTable怎么和数据库建立上关系?如果用遍历一条条更新的话,效率是否低了点?)
我在4,7楼已经说的很明白了.仍然可以用sqldataadapter去更新.设置他的insert,update,delete命令.
然后调用sqldataadapter.update()方法.此方法会根据你DataTable中的行状态来自动选择相应的语句去更新表另外:解释一下ad.InsertCommand=bd.GetInsertCommand(); 的含义
==============
这个是利用SqlCommandBuilder 来生成insert的command.