求教!!----使用 myDataAdapter.Updata("Table")更新的问题.

Merlin_Bloom 2005-03-20 10:20:04
我在DataSet里更新了 表 "Users",如果要把更新后的内容推回数据库,是不是还要先设置 SqlCommmand 的UpdateCommand 属性,再用SqlCommand.Updata("Users")?如果这样,是不是太不方便了?还不如用DataReader.ExecuteNonQuery 执行SqlCommand.InsertCommand.

在DataSet里更新"Users"的时候我用如下方法:

internal static int Insert(string name ,string pwd ,DataTable datatable)

{

DataRow newrow = datatable.NewRow();

datatable.Rows[1].BeginEdit();
newrow["UserName"] = name;
newrow["Password"] = pwd;
newrow["UserID"] = 111;
datatable.Rows[1].EndEdit();
Console.WriteLine ("Before Insert\n");
DisTable(datatable);
datatable.Rows.Add(newrow);

sqlConn.Open ();
int num = sqlDa.Update(datatable);
sqlConn.Close ();
return num;

}
...全文
189 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
Merlin_Bloom 2005-03-20
  • 打赏
  • 举报
回复
非常感谢2位的帮助,还有点不明白的地方:

To:chengbo198
"自己设置 UpdateCommand 会提示 :没有设置 InsertCommand"
"设置了更新逻辑以后,可以直接用int num = sqlDa.Update(datatable); 吗?不用再设置UpdataCommand?

To:Sunmast

一次更新n条记录,不也得设置 UpdateCommand?那还是要"SET UserName= '"+name+"',Password= '"+pwd+"'",那前面我在 DataSet里增加的 newrow 有什么用?
速马 2005-03-20
  • 打赏
  • 举报
回复
// 还不如用DataReader.ExecuteNonQuery 执行SqlCommand.InsertCommand
DataAdapter可以一次更新n条数据
这也是ADO.NET的主要优点之一
chengbo1983 2005-03-20
  • 打赏
  • 举报
回复
要自己提供更新逻辑
或者自已设置UpdateCommand
要不用CommandBuilder自动生成更新逻辑
Merlin_Bloom 2005-03-20
  • 打赏
  • 举报
回复
To fansihong:
谢谢!
DadaSet 在推回数据库的是不是 必须设置SqlCommand.CommandText 属性?
fansihong 2005-03-20
  • 打赏
  • 举报
回复
采用那种数据方式,
是由数据操作频率,数据量,决定的,
一般一次性解决战斗的,比较推荐DataReader;
如果整表或多个表的操作.还是用DataSet.

其实DataReader也接受多个查询返回集的.SqlCommand.CommandTest="语句一;语句N";
执行返回到DataReader里 用NextResult来取


总之无论如何,用DataAdapter来推动数据或者SqlCommand解决,都要根据情况决定,
Merlin_Bloom 2005-03-20
  • 打赏
  • 举报
回复
我想 做一个 清空表的 函数,通过DataAdapter.Update()方法,如下:
internal static DataTable ClearTable(DataTable datatable)
{
datatable.Clear ();
ShowTable(datatable);// 显示表 datatable 的所有行列内容.
SqlDataAdapter sqlda = new SqlDataAdapter();
sqlConn.Open ();// sqlConn 是全局变量.
int n = sqlda.Update(datatable);
sqlConn.Close ();
Console.WriteLine ("Update the table successfully return :\t"+n);
return datatable;
}
结果:Update the table successfully return : 0
哪里的问题?要设置sqlCmd.CommandTest ,再sqlda.UpdataCommand = sqlCmd ?
Merlin_Bloom 2005-03-20
  • 打赏
  • 举报
回复
To CSDANTM:
"SET UserName= '"+name+"',Password= '"+pwd+"'" 是为了设置 UpdateCommand,如果不写,他会提示我上面说的错误.
Merlin_Bloom 2005-03-20
  • 打赏
  • 举报
回复
谢谢!
To CSDANTM:
不对吧!我用 dataAdapter1.Fill(dataSet1,"Users"),在我用前面的方法Update已经加到dataset的表 "Users" 的时候,他会报错说" 未处理的异常 System.InvalidOperationException :当传递具有新行的 DataRow 集合时,更新要求有效的 InsertCommand " ,这个意思不是说,如果要 Update,必须要有 InsertCommand?
我是 设置InsertCommand并且 赋给 dataAdapter2,然后用 dataAdapter2.Update("Users"),这样做才可以正常.
另外:在这个 社区 "给分"必须要结帐,也就是一次全都给完?
速马 2005-03-20
  • 打赏
  • 举报
回复
// 一次更新n条记录,不也得设置 UpdateCommand?
是的
我是说,当你的DataSet有很多的改动后,只需要一次Update,就更新到数据库了
CSDNATM 2005-03-20
  • 打赏
  • 举报
回复
UserName= '"+name+"',Password= '"+pwd+"'",这样的语句不用你自己写的
CSDNATM 2005-03-20
  • 打赏
  • 举报
回复
当你改变dataset中的数据时,DataAdapter.UpData()会把现在dataset中的数据与数据库中的数据比较,自动检查是insert\update\delete,返回相应的SQL语句,执行相应的操作。

也就是说,你不用去考虑你是什么样的数据操作,你要修改哪几个字段,原来的查找语句中必须包含有,并且要有唯一键!

111,093

社区成员

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

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

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