新手求助:c#中DataAdapter的update方法要怎么使用,为什么我改不了数据库捏?

rain_of_july 2006-03-28 09:58:55
代码如下:
using System;
using System.Data;
using System.Data.SqlClient;
namespace UpdateOfSql
{
/// <summary>
/// test 的摘要说明。
/// </summary>
public class test
{
public static void Main()
{
string s="server=(local);uid=guest;pwd=guest;database=Mytestdatabase";
SqlConnection scon=new SqlConnection(s);
scon.Open();

SqlCommand mycomm=new SqlCommand("update stu set sex='female' where stuName='Steven'",scon);
SqlDataAdapter da=new SqlDataAdapter("select * from stu",scon);


da.UpdateCommand=mycomm;


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

da.Update(ds,"stu");
ds.AcceptChanges();


DataTable dt=ds.Tables["stu"];
foreach(DataRow dr in dt.Rows)
{
Console.WriteLine(dr["stuName"]+ " "+ dr["studentid"]+ " "+dr["sex"] );
}
scon.Close();

}
}
}

为什么该不了数据库呢?如果加上一条语句 da.UpdateCommand.ExecuteNonQuery,数据库是可以修改了,但是dataset中并没有修改。换句话说,da.Update(ds,"stu");ds.AcceptChanges();这两句在这个程序里面好像根本没有执行阿。

我的问题就是,对于SqlDataAdapter,它有InsertCommand,UpdateCommand,DeleteCommand,那它的update()方法要怎么用才可以使得dataset和数据库中的数据都被修改呢?
...全文
402 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
henuzzx 2010-05-28
  • 打赏
  • 举报
回复
我想问一下,你这个是固定的修改某一行,如果我想把SQL语句写活,可以根据SQL语句随意改,请问该怎么写呢
rain_of_july 2006-03-28
  • 打赏
  • 举报
回复
现在是dataset和数据库都没改。。。
dino815613 2006-03-28
  • 打赏
  • 举报
回复
如果仅仅是你的dataset修改了但是你的数据库没有修改,你在 sqlDAdapter.Update( sqlRecordSet, "EmployeeInfo" );
前面加上一条语句
this.BindingContext[sqlRecordSet, "EmployeeInfo"].EndCurrentEdit();就行了
rayscici 2006-03-28
  • 打赏
  • 举报
回复
dataset 相当于是数据库和程序的中转站,你在dataset里修改数据以后,数据库就跟着改了。
干吗非要分得那么清楚,一定要说dataset和数据库。
应用dataset的目的本身是为了更方便的操作数据库,你这样好像是多此一举。
rain_of_july 2006-03-28
  • 打赏
  • 举报
回复
对阿,我就是这么写的阿,
SqlDataAdapter da=new SqlDataAdapter("select * from stu",scon)//初始adapter da.UpdateCommand=mycomm;//设adater的updatecomand属性
DataSet ds=new DataSet();
da.Fill(ds,"stu"); //填充
da.Update(ds,"stu");//更新
ds.AcceptChanges();
那还没有更新是怎么回事阿
Knight94 2006-03-28
  • 打赏
  • 举报
回复
不是,因为我做更新的时候(主要是指添加的时候),有个字段是无法获得的,所以在这儿偷个懒
-_-||

如果没有绑定,那么在设定DataAdapter的UpdateCommand、InsertCommand等等,这些是必须的,然后执行
sqlDAdapter.Update( sqlRecordSet, "EmployeeInfo" );
即可
rain_of_july 2006-03-28
  • 打赏
  • 举报
回复
那个日志我看了,如果没有用datagrid,要怎么绑定阿。还有我看了您的更新按钮的事件,
sqlDAdapter.Update( sqlRecordSet, "EmployeeInfo" );

sqlRecordSet.Tables["EmployeeInfo"].Rows.Clear();

sqlDAdapter.Fill( sqlRecordSet, "EmployeeInfo" );
最后这个fill往dataset里填充的就是更新后的数据吗?


Ccode 2006-03-28
  • 打赏
  • 举报
回复
mark
lxd_201 2006-03-28
  • 打赏
  • 举报
回复
好象是用DATASET的ADD()方法还是NEW方法来更改数据集然后再UPDATE、ACCEPTCHANG
Knight94 2006-03-28
  • 打赏
  • 举报
回复
参看
http://blog.csdn.net/knight94/archive/2006/03/17/627556.aspx
rain_of_july 2006-03-28
  • 打赏
  • 举报
回复
谢谢大家的帮忙。这下子弄明白了究竟少的地方在哪里了。

愚翁老师:一语惊醒梦中人^^。原来我一直有个致命的理解错误。赫赫,不过现在已经明白了。

wxm4585老师:非常感谢你耐心的指导。你的方法我看了,你用的方法相当于在原来的dataset里插入一条新记录,如果是执行insert语句,是可行的,但是如果是更新语句用这种方法的话,在插入的时候可能会碰上主键冲突。
所以我最后将代码改成了这样子:
da.Fill(ds,"stu");//填充
DataRow[] dr=ds.Tables[0].Select("stuname='steven'");//找到要更改的行
for(int i=0;i<dr.Length;i++)
dr[i]["sex"] = "female";//修改

da.Update(ds,"stu");//更新
ds.AcceptChanges();

这样子就可以了。
再次感谢大家。
Knight94 2006-03-28
  • 打赏
  • 举报
回复
da.Fill(ds,"stu"); //填充

//你要进行修改,否则下面这句没什么作用
da.Update(ds,"stu");//更新
wxm4585 2006-03-28
  • 打赏
  • 举报
回复
你既然要用DataAdapter.Updata()方法,就需要用使用System.Data.SqlClient.SqlCommandBuilder cmd ;对象。修改以后的代码,试试。

using System;
using System.Data;
using System.Data.SqlClient;
namespace UpdateOfSql
{
/// <summary>
/// test 的摘要说明。
/// </summary>
public class test
{
public static void Main()
{
string s="server=(local);uid=guest;pwd=guest;database=Mytestdatabase";
SqlConnection scon=new SqlConnection(s);
scon.Open();

SqlDataAdapter da=new SqlDataAdapter("select * from stu",scon);
SqlCommandBuilder cmd = new SqlCommandBuilder(da);


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

DataRow dr = ds.Tables[0].Rows.NewRow();
dr["sex"] = "female";
dr["stuName"] = "Steven";
ds.Tables[0].Rows.Add(dr);

da.Update(ds,"stu");
ds.AcceptChanges();


DataTable dt=ds.Tables["stu"];
foreach(DataRow dr in dt.Rows)
{
Console.WriteLine(dr["stuName"]+ " "+ dr["studentid"]+ " "+dr["sex"] );
}
scon.Close();

}
}
}
《Dreamweaver+ASP.NET动态网站设计与典型实例》配书光盘说明 配书光盘 版权所有,侵权必究 2007年10月 一、光盘内容: 1. Readme.txt 光盘说明文件,在使用前请先读光盘的Readme.txt文件。 2.目录内容: \1 (第1章) MyFirstPage.aspx:一个简单的ASP.NET程序 \3 (第3章) default.html:个人博客首页面 \5 (第5章) 5-1.aspx:个人简历页面 \6 (第6章) Friend.mdb:示例所引用的好友地址簿数据库 DataGrid.aspx:DataGrid控件的应用 DataList_Repeater.aspx:DataList控件和Repeater控件的应用 UseDataAdapter.aspx:使用DataAdapter对象访问数据 UseDataReader.aspx:使用DataReader对象访问数据 \liuyangbu (第7章) Admin.aspx:留言管理页面 Default.aspx:浏览留言页面 Login.aspx:管理员的登录页面 ly_add.aspx:添加留言页面 ly_Reply.aspx:留言回复页面 data.mdb:数据库 web.config:应用程序配置文件(在测试过程,随着数据库data.mdb的路径不同,web.config代码的“Data Source=G:\example\liuyanbu\data.mdb”也作相应的改动)。 \huiyuanguanli (第8章) Active_User.aspx:激活会员账号页面 default.aspx:会员登录页面 LoadPass.aspx:找回密码页面 login.aspx:会员注册页面 main.aspx:会员登录成功后的主页面 ModiPwd.aspx:修改密码页面 ModiUser.aspx:修改会员信息页面 UserInfo.mdb:数据库 web.config:应用程序配置文件(在测试过程,随着数据库data.mdb的路径不同,web.config代码的“Data Source=G:\example\huiyuanguanli\UserInfo.mdb”也作相应的改动)。 \xiangceguanli (第9章) Admin.aspx:后台主页面 Class_Add.aspx:添加分类页面 Class_Admin.aspx:管理分类页面 Default.aspx:浏览相册页面 Photo_Add.aspx:添加相片页面 Photo_Admin.aspx:管理相片页面 Photo_Edit.aspx:更改相片信息页面 Photo_LY_Admin.aspx:相片留言管理页面 ViewPhoto.aspx:查看相片页面 web.config:应用程序配置文件(在测试过程,随着数据库data.mdb的路径不同,web.config代码的“Data Source=G:\example\xinwenfabu\Data\data.mdb”也作相应的改动)。 \data\data.mdb:数据库 \tongxuelu (第10章) BJGL.aspx:班级管理页面 BJLY.aspx:浏览班级留言页面 BJLY_add.aspx:添加班级留言页面 BJTXL.aspx:班级通讯录页面 BJXC.aspx:浏览班级相册页面 BJXC_Add.aspx:添加班级相册页面 Class_Add.aspx:添加班级页面 Default.aspx:用户登录页面 LoadPass.aspx:找回密码页面 Login.aspx:用户注册页面 Main.aspx:主页面 ModiUser.aspx:修改用户信息页面 Pop_Info.aspx:批复管理员申请页面 School_Add.aspx:新增学校页面 Schoolinfo.aspx:查看班级列表页面

110,539

社区成员

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

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

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