怎样将DataSet中修改(增加,删除,修改)过的记录更新进数据库中??用DataGrid显示的

Jeff20040819 2005-04-05 12:16:00
1。增加
string source = "user id=spm;data source=spmdb;password=spm";
string sele = "select * from TEST_DEPT1";
、、、、、、
OracleConnection conn = new OracleConnection(source);
conn.Open();
OracleDataAdapter da = new OracleDataAdapter(sele,conn);

DataSet ds = new DataSet();
da.Fill(ds,"DEPT1");

DataRow row = ds.Tables["DEPT1"].NewRow();
row[0] = Convert.ToInt32(textBox1.Text.Trim());
row[1] = textBox2.Text.Trim();
ds.Tables["DEPT1"].Rows.Add(row);

dataGrid1.SetDataBinding(ds,"DEPT1");
// da.Update(ds,"DEPT1"); 用这种方式有时侯好象不行的?有时候行??
conn.Close();
、、、、、

2。删除
string source = "user id=spm;data source=spmdb;password=spm";
string sele = "select * from Test_Dept1";
string strDeptNo;
int i;

OracleConnection conn = new OracleConnection(source);
conn.Open();
OracleDataAdapter da = new OracleDataAdapter(sele,source);

DataSet ds = new DataSet();
da.Fill(ds,"Dept1");
i = dataGrid1.CurrentRowIndex ;
strDeptNo = ds.Tables["Dept1"].Rows[i]["DEPTNO"].ToString();
ds.Tables["Dept1"].Rows[i].Delete();
ds.AcceptChanges();
da.Update(ds,"Dept1");
dataGrid1.SetDataBinding(ds,"Dept1");

//如果不用下面三行代码,怎么样将DataSet中删除的记录更新进数据库中?
string dele = "delete from TEST_DEPT1 where DEPTNO=" + strDeptNo;
OracleCommand cmd = new OracleCommand(dele,conn);
cmd.ExecuteNonQuery();

conn.Close();
、、、、、、

3。对于简单的修改(增加,删除,修改)不用DataSet应该简单些吧?即用SQL直接对数据库操作
谈谈你的看法:什么时候用DataSet?什么时候用SQL直接对数据库操作?
string source = "user id=spm;data source=spmdb;password=spm";
string insert = "insert into TEST_DEPT (DEPTNO,DNAME) values (90,'ee')";
string sele = "select * from TEST_DEPT";
、、、、、、
OracleConnection conn = new OracleConnection(source);
conn.Open();
OracleCommand cmd = new OracleCommand(insert,conn);
cmd.ExecuteNonQuery();

OracleDataAdapter da = new OracleDataAdapter(sele,conn);

DataSet ds = new DataSet();
da.Fill(ds,"DEPT");
dataGrid1.DataSource = ds.Tables["DEPT"];
conn.Close();
、、、、、、、
...全文
851 36 打赏 收藏 转发到动态 举报
写回复
用AI写文章
36 条回复
切换为时间正序
请发表友善的回复…
发表回复
Jeff20040819 2005-04-08
  • 打赏
  • 举报
回复
up
涛声宜旧 2005-04-07
  • 打赏
  • 举报
回复
用DataAdapter.update方法,记着要用到commandbuider的实例
kknd2005 2005-04-07
  • 打赏
  • 举报
回复
利用CommandBuilder就可以了,MSDN上就有例子,自己去看
onekissme 2005-04-07
  • 打赏
  • 举报
回复
dataAdapter需要4个Command,你需要手工增加Insert,Delete,Update command
你参考下command builder,command builder只适合Sql dataAdapter
可以解决
"当传递具有新行的DataRow集合时,更新要求有效的InsertCommand,不知道怎么回事情??"
问题

对于问题2:删除
da.Update(ds,"DEPT1");在这里不能更新数据库,不知道这是怎么回事情??
Update之前不要写AcceptChanges

Jeff20040819 2005-04-07
  • 打赏
  • 举报
回复
up
cg2003 2005-04-07
  • 打赏
  • 举报
回复
up
onekissme 2005-04-07
  • 打赏
  • 举报
回复
use OracleCommandBuilder
onekissme 2005-04-07
  • 打赏
  • 举报
回复
CommandBuilder won't support oracle
itmingong 2005-04-06
  • 打赏
  • 举报
回复
da.Update(ds,"Dept1")肯定是将DataSet中的数据更新到数据库中的。
但在此之前不能使用ds.AcceptChanges();
Jeff20040819 2005-04-06
  • 打赏
  • 举报
回复
up
lingfeng0626 2005-04-06
  • 打赏
  • 举报
回复
UPUP
egxsun 2005-04-06
  • 打赏
  • 举报
回复
dataset要有主键
Jeff20040819 2005-04-06
  • 打赏
  • 举报
回复
up
cg2003 2005-04-06
  • 打赏
  • 举报
回复
对于问题2:删除
如果不用下面三行代码,就不能删除数据库中的相应记录
string dele = "delete from TEST_DEPT1 where DEPTNO=" + strDeptNo;
OracleCommand cmd = new OracleCommand(dele,conn);
cmd.ExecuteNonQuery();

有没有哪位有这方面的例子:关于WinForm、DataGrid、DataSet的增加、删除、修改、更新进数据库
cg2003 2005-04-06
  • 打赏
  • 举报
回复
to: itmingong(IT民工),zhongwanli(一心只为做民工。。。。头!!!!)

对于问题2:删除
如果我在da.Update(ds,"Dept1")之前不使用ds.AcceptChanges(),那么就报错:当传递具有已删除行的DataRow集合时,更新要求有效的DeleteCommand,不知道怎么回事情??

各位老大在给点意见!!!
zhongwanli 2005-04-06
  • 打赏
  • 举报
回复
我觉得:
直接用适配器更新即可
如 : sda.Update( DataSet.GetChanges() , "{要更新的表名}" );

因适配器的机制就是根据数据表的主键来更新的。
当然也要注意楼上所说的。
rehuo 2005-04-05
  • 打赏
  • 举报
回复
用dataset操作数据,我认为有两种方式,一种是直接绑定insertcommand,updatecommand等等,最后使用da.Update(ds,"Dept1")更新到数据库中,另外一种是遍历dataset,分析每一行数据状态,然后根据状态更新到数据库中(删除比较特殊一点)。
Jeff20040819 2005-04-05
  • 打赏
  • 举报
回复
一楼的,你没有明白我的意思
maitianyou1 2005-04-05
  • 打赏
  • 举报
回复
你上面的代码写的太多了。
下面是我自己用过的代码,能在dataGrid显示的。
你可以仿照这个来
temp = "SELECT * FROM Chji_1";
sqlade = new SqlDataAdapter(temp,yzconn);
m_dataset.Clear();
sqlade.Fill(m_dataset,"Chji_1");//根据查找的结果放入临时m_dataset数据集
dataGrid1.SetDataBinding(m_dataset,"Chji_1");
xspf 2005-04-05
  • 打赏
  • 举报
回复
在OracleDataAdapter da = new OracleDataAdapter(sele,conn);后加一句
OracleCommandBuilder cb = new OracleCommandBuilder(da);

自定义以下几个属性也可以

OracleDataAdapter.InsertCommand
OracleDataAdapter.DeleteCommand
OracleDataAdapter.UpdateCommand

加载更多回复(16)

110,567

社区成员

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

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

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