简单的DataSet更新数据,请直接帮助修改代码,勿贴教程或参考代码,多谢!
数据库中只有一条记录:ID,username,password三个字段,现在我要用DataSet更新username和password,我如下代码当只更新一个字段时能正常执行,但同时更新两个字段就出错,望帮助修改代码,而不是帖出教程或帖出参考,MSDN上查了两天了,CSDN上也发过一帖了,还是没能解决:
private void ok_Click(object sender, System.EventArgs e)
{
OleDbConnection conn=new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+Server.MapPath("../access/db1.mdb"));
conn.Open();
OleDbDataAdapter myAdapter=new OleDbDataAdapter("SELECT ID,username,password FROM admin",conn);
OleDbCommandBuilder myBuilder=new OleDbCommandBuilder(myAdapter);
DataSet myDataSet=new DataSet();
myAdapter.Fill(myDataSet,"admin");
if(old_name.Text.Trim()==myDataSet.Tables["admin"].Rows[0]["username"].ToString()&&old_password.Text.Trim()==myDataSet.Tables["admin"].Rows[0]["password"].ToString())
{
//当省去下列一条,即只更新一个字段时能正常执行。
myDataSet.Tables["admin"].Rows[0]["username"]=new_name.Text.Trim();
myDataSet.Tables["admin"].Rows[0]["password"]=new_password2.Text.Trim();
myAdapter.Update(myDataSet,"admin");
conn.Close();
}
else
{
Response.Write("<script>alert('原用户名或密码错误!')</script>");
}
}
UPDATE 语句的语法错误。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。
异常详细信息: System.Data.OleDb.OleDbException: UPDATE 语句的语法错误。
行 76:myAdapter.Update(myDataSet,"admin");
问题点数:50、回复次数:17Top
1 楼xivi(xivi)回复于 2005-01-19 11:39:20 得分 2
OleDbCommandBuilder myBuilder=new OleDbCommandBuilder(myAdapter);
myAdapter.UpdateCommand=myBuilder.GetUpdateCommand();Top
2 楼Eddie005(♂) №.零零伍 (♂)回复于 2005-01-19 11:42:02 得分 10
myAdapter.Fill(myDataSet,"admin");
myDataSet.Tables[0].PrimaryKey = new DataColumn[]{myDataSet.Tables[0].Columns["id"]};Top
3 楼luck0235(风平浪静时人人都能掌舵)回复于 2005-01-19 11:55:32 得分 0
照楼上两位的修改,错误依旧。Top
4 楼jzflyaway(flyaway)回复于 2005-01-19 11:57:26 得分 10
使用命令集合为类:OleDbCommandBuilder
使用这个类后自动帮你生成更新,插入和删除命令,然后人利用GetUpdateCommand(),GetInsertCommand(),GetDeleteCommand()命令就可以对数据库更新了.虽然不提倡这样做,因为速度太慢,但这样容易理解和使用.
之后注意重新绑定数据库.
OleDbCommandBuilder commandBuilder=new OleDbCommandBuilder(oleDataAdapter);
myAdapter.UpdateCommand=commandBuilder.GetUpdateCommand();
myAdapter.InsertCommand=commandBuilder.GetInsertCommand();
myAdapter.DeleteCommand=commandBuilder.GetDeleteCommand();
myAdapter.Update(myDataSet,"admin");
控件名.DataSource=myDataSet;
控件名.DataBind();
不知这样楼主是否明白?Top
5 楼cancerser(都是混饭吃,记得要结帖)回复于 2005-01-19 12:06:49 得分 1
myAdapter.Update(myDataSet);
看看这样有错没?
Top
6 楼luck0235(风平浪静时人人都能掌舵)回复于 2005-01-19 12:36:41 得分 0
真的我在MSDN上都查晕了,也不想了解什么原理了,只求哪位能写出一两句关键,让我这个程序正常执行吧,神啊,救救我吧!当学到ADO.net的DataSet终于让我怀念ADO的好了。Top
7 楼hedonister(冰戈)回复于 2005-01-19 13:17:31 得分 2
我看了你的代码了,就更新两个字段为什么不直接拼接SQL语句实现呢?Top
8 楼DanielQQ()回复于 2005-01-19 13:21:46 得分 2
你试一试直接采用OleDbCommandText="select * from 表名"; 不使用OleDbCommandBuilder试一试,但一定要加入下面一句话:
myDataSet.Tables[0].PrimaryKey = new DataColumn[]{myDataSet.Tables[0].Columns["ID"]};
字段大小写要一致!Top
9 楼luck0235(风平浪静时人人都能掌舵)回复于 2005-01-19 13:33:36 得分 0
回hedonister(★★★★★) :本来可以用SQL实现的,但看了书上对DataSet评价的如此高,所以想用DataSet试试,没想到这样简单的更新一试就两天还没试好。Top
10 楼goody9807(http://goody9807.cnblogs.com)回复于 2005-01-19 18:11:29 得分 5
ID,username,password三个字段
中肯定有关键字 把字段名都加个1试试
ID1,Username1,password1Top
11 楼goody9807(http://goody9807.cnblogs.com)回复于 2005-01-19 18:12:34 得分 0
或者在Sql语句中加 [ ]
例如: Insert users([ID],[username],[password]) values ....Top
12 楼xiaodao2008(小刀)回复于 2005-01-19 18:17:49 得分 1
啦啦啦...Top
13 楼seesea125(执著)回复于 2005-01-19 18:40:29 得分 12
if(old_name.Text.Trim()==myDataSet.Tables["admin"].Rows[0]["username"].ToString()&&old_password.Text.Trim()==myDataSet.Tables["admin"].Rows[0]["password"].ToString())
{
//当省去下列一条,即只更新一个字段时能正常执行。
myDataSet.Tables["admin"].Rows[0]["username"]="sdsdds";
myDataSet.Tables["admin"].Rows[0]["password"]="sdfdsfdsf";//先这样试试,避免这有问题
OleDbTransaction objTransaction= new OleDbTransaction();
try
{
OleDbCommandBuilder objCommandBuilder =new OleDbCommandBuilder(myAdapter);
myAdapter.DeleteCommand = objCommandBuilder.GetDeleteCommand();
myAdapter.InsertCommand = objCommandBuilder.GetInsertCommand();
myAdapter.UpdateCommand = objCommandBuilder.GetUpdateCommand();
conn.Open();//可以删除,执行UPDATE时会自动打开连接,然后再将连接关闭,所以后来不用关
//闭了
conn.BeginTransaction();/开始事物交易
objTransaction = objConnect.BeginTransaction();
omyAdapter.DeleteCommand.Transaction = objTransaction;
myAdapter.InsertCommand.Transaction = objTransaction;
myAdapter.UpdateCommand.Transaction = objTransaction;
myAdapter.Update(myDataSet,"admin");
}
catch()
{
objTransaction.Rollback()
else
{
Response.Write("<script>alert('原用户名或密码错误!')</script>");
}
Top
14 楼seesea125(执著)回复于 2005-01-19 18:44:04 得分 0
有些地方语法有错误,修改一下就成了Top
15 楼zhangfire(色狼也可以学.net)回复于 2005-01-19 21:20:01 得分 5
private void ok_Click(object sender, System.EventArgs e)
{
OleDbConnection conn=new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+Server.MapPath("../access/db1.mdb"));
OleDbDataAdapter myAdapter=new OleDbDataAdapter("SELECT ID,username,password FROM admin",conn);
DataSet myDataSet=new DataSet();
myAdapter.Fill(myDataSet,"admin");
if(old_name.Text.Trim()==myDataSet.Tables["admin"].Rows[0]["username"].ToString()&&old_password.Text.Trim()==myDataSet.Tables["admin"].Rows[0]["password"].ToString())
{
//当省去下列一条,即只更新一个字段时能正常执行。
myDataSet.Tables["admin"].Rows[0]["username"]=new_name.Text.Trim();
myDataSet.Tables["admin"].Rows[0]["password"]=new_password2.Text.Trim();
OleDbCommandBuilder myBuilder=new OleDbCommandBuilder(myAdapter);
myAdapter.Update(myDataSet,"admin");
}
else
{
Response.Write("<script>alert('原用户名或密码错误!')</script>");
}
}
好了,这种方法你还不太理解:)
还有,下次要把代码贴得尽量有点道理,你这样少一些地方,看着好别扭。
Good luck!Top
16 楼seesea125(执著)回复于 2005-01-20 09:09:28 得分 0
数据库open工作和数据库操作工作要try{代码} catch{异常} finally{释放对象},这样比较容易找到错误地方Top
17 楼luck0235(风平浪静时人人都能掌舵)回复于 2005-01-20 19:29:08 得分 0
压抑的第四天,终于解决问题,问题根源似乎出乎各位预料:
在Access数据库中,当某一字段设为"password"时,就无法用我的方法对其更新!所以我在数据库中将"password"字段名改为"psd",一切正常,我不知道是不是"password"与.net framework的某关键字产生冲突。就这个小细节害得我几天几夜没睡好觉,并在CSDN总计放了350分,在MSDN中浏览了不下五万字的资料。两个字:痛苦!
有兴趣的朋友可以在Access中设个"password"字段试试,也不知其它数据库是否存在该问题。
好了,结账,感谢各位认真看完我代码的朋友,感谢各位热心的建议,获益良多。Top




