SqlConnection Connection = new SqlConnection("server=127.0.0.1;database=testData;uid=sa;pwd=8888;Connection TimeOut=600");
Connection.Open();
SqlDataAdapter da = new SqlDataAdapter("select * from test", Connection);
DataSet ds = new DataSet();
ds.Clear();
da.Fill(ds, "MaketPrice"); ds.Tables[0].Rows[0][0] = "test";
ds.AcceptChanges(); //da = new SqlDataAdapter("", this.GetConn()); SqlCommandBuilder sqlCmdBuilder = new SqlCommandBuilder(da); da.Update(ds, "MaketPrice"); ds.AcceptChanges();
Connection.Close(); dataGridView2.DataSource = ds;
dataGridView2.DataMember = "MaketPrice";为什么数据库没有没有发生变化,ds确实是发生变化了的,我用dataGridView显示出变化后的数据,确实发生了变化,但是数据为什么没有发生变化。
Connection.Open();
SqlDataAdapter da = new SqlDataAdapter("select * from test", Connection);
DataSet ds = new DataSet();
ds.Clear();
da.Fill(ds, "MaketPrice"); ds.Tables[0].Rows[0][0] = "test";
ds.AcceptChanges(); //da = new SqlDataAdapter("", this.GetConn()); SqlCommandBuilder sqlCmdBuilder = new SqlCommandBuilder(da); da.Update(ds, "MaketPrice"); ds.AcceptChanges();
Connection.Close(); dataGridView2.DataSource = ds;
dataGridView2.DataMember = "MaketPrice";为什么数据库没有没有发生变化,ds确实是发生变化了的,我用dataGridView显示出变化后的数据,确实发生了变化,但是数据为什么没有发生变化。
解决方案 »
- 无刷新添加treeView节点
- 在asp.net里面,我有一个GridView, 现在我想要对里面进行循环赋值, 不想用绑定,怎么写啊
- 关于数据库的连接 sqldatareader,你肯定知道
- 水晶报表自带的报表文件Chart.rpt图片显示问题
- 关于排序,我可不可以任意指定某条记录排在第几?
- HyperLink 问题
- 急:用VS.NET调试最简单的程序,编译通过,但在IE里什么也没有啊,这是为什么啊?该怎么办?
- 紧急! 下午要去配台新电脑,麻烦给个配置(尽量用国产货)。
- 奇葩问题
- Response.WriteFile("http://www.x.com/1.htm");
- 求救!JS问题。很简单但是弄不明白哪错了!
- 高手来,在线等 还是一个 JAVASCRIPT问题 送分 ,一定
确实改变了记录集,但是这只是从数据库里取出的数据,简单来说你没有对数据的表操作,只对记录集做了修改,是不可能改变数据库里的记录的。
AcceptChanges();
将rowstate属性设为默认值,所以不会再对数据库操作。
ds.AcceptChanges(); //da = new SqlDataAdapter("", this.GetConn()); SqlCommandBuilder sqlCmdBuilder = new SqlCommandBuilder(da);ps
这里的 ds.AcceptChanges();
{
SqlConnection conn = new SqlConnection(strConnection));
SqlDataAdapter myAdapter = new SqlDataAdapter();
SqlCommand myCommand = new SqlCommand("select * from "+strTblName),(SqlConnection) conn);
myAdapter.SelectCommand = myCommand;
SqlCommandBuilder myCommandBuilder = new SqlCommandBuilder(myAdapter);
try { lock(this) //处理并发情况(分布式情况) { myAdapter.Update(ds,strTblName); } }
catch(Exception err)
{ conn.Close();
throw new BusinessException(err);
} return ds; //数据集的行状态在更新后会都变为: UnChange,在这次更新后客户端要用返回的ds}或public DataSet UpdateByDataSet(DataSet ds,string strTblName,string strConnection)
{
SqlConnection conn = new SqlConnection(strConnection));
SqlCommand myCommand = new SqlCommand("select * from "+strTblName),(SqlConnection) conn); SqlDataAdapter myAdapter = new SqlDataAdapter(myCommand ); SqlCommandBuilder myCommandBuilder = new SqlCommandBuilder(myAdapter);
myAdapter.InsertCommand = myCommandBuilder .GetInsertCommand(); myAdapter.UpdateCommand = myCommandBuilder .GetUpdateCommand(); myAdapter.DeleteCommand = myCommandBuilder .GetDeleteCommand(); try { lock(this) //处理并发情况(分布式情况) { conn.Open(); myAdapter.Update(ds,strTblName); conn.Close(); }
return ds; //数据集的行状态在更新后会都变为: UnChange,在这次更新后客户端要用返回的ds }
catch(Exception err)
{ conn.Close();
throw new BusinessException(err);
}
}直接调用这两个方法的任意一个就OK啦,select * from "+strTblName是一定要的,
主要是告诉 SqlDataAdapter更新哪个表
你说的不对,
你开始说的好像是对的,如果我不是修改记录集,而是插入一个新的记录,或者删除一个,确实可以保存到数据库,
但是我就想改变一些值,保存到数据库,
我的代码为什么不行,怎么改,你贴的代码太长,没看。
我想找出我的代码不能更新的原因,
并且应该怎么修改。
Dim ds As New DataSet Dim cb As New OracleClient.OracleCommandBuilder(Me.adp)
Me.adp.UpdateCommand = cb.GetUpdateCommand
Me.adp.DeleteCommand = cb.GetDeleteCommand
Me.adp.InsertCommand = cb.GetInsertCommand
'Me.adp.Fill(DataSet11.A_TEST)
Me.adp.Fill(ds, "A_TEST") ds.Tables(0).Rows(6)("A") = CInt(A)
ds.Tables(0).Rows(6)("B") = CInt(B)
ds.Tables(0).Rows(6)("C") = CInt(C)
ds.Tables(0).Rows(6)("NAME") = Name
Me.adp.Update(ds.Tables("A_TEST")) Me.oraConn.Close()
我的一个例子,可以更新的啊,没发现跟你的有什么区别
Me.adp.UpdateCommand = cb.GetUpdateCommand
Me.adp.DeleteCommand = cb.GetDeleteCommand
Me.adp.InsertCommand = cb.GetInsertCommand
它只是对内存里的数据进行更改确定,并没有对数据库产生任务影响。
ds.AcceptChanges();
------------------
把ds.AcceptChanges();这句去掉.要不然你所有修改的行状都会变成DataRowState.Unchanged ;
da就是要根据DataRowState来执行更新的.另外,本来是很简单的东西,CH_MARS(木头)写得这么复杂. myAdapter.InsertCommand 和 myCommandBuilder .GetInsertCommand()本来就是同一个引用,还去赋值干嘛呢?
看这句
SqlCommand myCommand = new SqlCommand("select * from "+strTblName),(SqlConnection) conn);
myAdapter.SelectCommand = myCommand;
你需要改UpdateCommand
ds.AcceptChanges();
去掉应该就可以了呀
myAdapter.UpdateCommand = myCommandBuilder .GetUpdateCommand();
我记得我上次遇到这个问题时就是这个原因。
SqlDataAdapter myAdapter = new SqlDataAdapter(myCommand ); SqlCommandBuilder myCommandBuilder = new SqlCommandBuilder(myAdapter);
myAdapter.InsertCommand = myCommandBuilder .GetInsertCommand(); myAdapter.UpdateCommand = myCommandBuilder .GetUpdateCommand(); myAdapter.DeleteCommand = myCommandBuilder .GetDeleteCommand();
有三中方法。适合不同的操作。支持2.0的。