****这个更新为什么没成功*******

NetAnt007 2006-08-31 05:20:00
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显示出变化后的数据,确实发生了变化,但是数据为什么没有发生变化。
...全文
358 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
NetAnt007 2006-09-01
  • 打赏
  • 举报
回复
h_jg_2010 2006-09-01
  • 打赏
  • 举报
回复
要加上
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的。
goodluckalong 2006-09-01
  • 打赏
  • 举报
回复
把跟在ds.Tables[0].Rows[0][0] = "test";后面的那一行
ds.AcceptChanges();
去掉应该就可以了呀
NetAnt007 2006-08-31
  • 打赏
  • 举报
回复
顶起来,谁来帮帮忙。
hyz_0228 2006-08-31
  • 打赏
  • 举报
回复
我也遇到过类似的问题,最后我用ds.Tables[0].Rows[I][J]遍历代替的SqlCommandBuilder
NetAnt007 2006-08-31
  • 打赏
  • 举报
回复
忘记说了,我用的是VS2005,是不是有这个关系啊。
NetAnt007 2006-08-31
  • 打赏
  • 举报
回复
还是不行啊。把ds.AcceptChanges();去掉还是不行啊。

CH_MARS 2006-08-31
  • 打赏
  • 举报
回复
式式用SqlCommand
看这句
SqlCommand myCommand = new SqlCommand("select * from "+strTblName),(SqlConnection) conn);
myAdapter.SelectCommand = myCommand;
你需要改UpdateCommand
机器人 2006-08-31
  • 打赏
  • 举报
回复
ds.AcceptChanges(); 在Update之后调用。
MyLf 2006-08-31
  • 打赏
  • 举报
回复
ds.Tables[0].Rows[0][0] = "test";
ds.AcceptChanges();
------------------
把ds.AcceptChanges();这句去掉.要不然你所有修改的行状都会变成DataRowState.Unchanged ;
da就是要根据DataRowState来执行更新的.

另外,本来是很简单的东西,CH_MARS(木头)写得这么复杂. myAdapter.InsertCommand 和 myCommandBuilder .GetInsertCommand()本来就是同一个引用,还去赋值干嘛呢?
daishengs 2006-08-31
  • 打赏
  • 举报
回复
ds.AcceptChanges();
它只是对内存里的数据进行更改确定,并没有对数据库产生任务影响。
shan1119 2006-08-31
  • 打赏
  • 举报
回复
估计是这里的原因
Me.adp.UpdateCommand = cb.GetUpdateCommand
Me.adp.DeleteCommand = cb.GetDeleteCommand
Me.adp.InsertCommand = cb.GetInsertCommand
zpengenpz 2006-08-31
  • 打赏
  • 举报
回复
帮顶
shan1119 2006-08-31
  • 打赏
  • 举报
回复
Me.oraConn.Open()
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()
我的一个例子,可以更新的啊,没发现跟你的有什么区别
NetAnt007 2006-08-31
  • 打赏
  • 举报
回复
CH_MARS(木头)
你开始说的好像是对的,如果我不是修改记录集,而是插入一个新的记录,或者删除一个,确实可以保存到数据库,
但是我就想改变一些值,保存到数据库,
我的代码为什么不行,怎么改,你贴的代码太长,没看。
我想找出我的代码不能更新的原因,
并且应该怎么修改。
NetAnt007 2006-08-31
  • 打赏
  • 举报
回复
yuwenge(活得痛快):
你说的不对,
CH_MARS 2006-08-31
  • 打赏
  • 举报
回复
public DataSetUpdateByDataSet(DataSet ds,string strTblName,string strConnection)
{
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更新哪个表

卧_槽 2006-08-31
  • 打赏
  • 举报
回复
ds.Tables[0].Rows[0][0] = "test";
ds.AcceptChanges();

//da = new SqlDataAdapter("", this.GetConn());

SqlCommandBuilder sqlCmdBuilder = new SqlCommandBuilder(da);

ps
这里的 ds.AcceptChanges();
卧_槽 2006-08-31
  • 打赏
  • 举报
回复
ds.AcceptChanges();

这句不要,数据库会起变化

使用sqlCmdBuilder对DataSet做update时,.net通过rowstate属性来确定数据是否被更改过。
AcceptChanges();
将rowstate属性设为默认值,所以不会再对数据库操作。
CH_MARS 2006-08-31
  • 打赏
  • 举报
回复
说错了,收回,我找一列子你看
加载更多回复(2)

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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