网站大量收购闲置独家精品文档,联系QQ:2885784924

用SqlDataAdapterUpdateDataSetDs更新数据库.docx

用SqlDataAdapterUpdateDataSetDs更新数据库.docx

  1. 1、本文档共17页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
用SqlDataAdapterUpdateDataSetDs更新数据库

一. 用SqlDataAdapter.Update(DataSet Ds)更新数据库.1. DbDataAdapter调用 Update 方法时,DataAdapter 将分析已作出的更改并执行相应的命令(INSERT、UPDATE 或 DELETE)。当 DataAdapter 遇到对 DataRow 的更改时,它将使用 InsertCommand、UpdateCommand 或 DeleteCommand 来处理该更改。这样,您就可以通过在设计时指定命令语法并在可能时通过使用存储过程来尽量提高 ADO.NET 应用程序的性能。在调用 Update 之前,必须显式设置这些命令。如果调用了 Update 但不存在用于特定更新的相应命令(例如,不存在用于已删除行的 DeleteCommand),则将引发异常。但是如果 DataTable 映射到单个数据库表或从单个数据库表生成,则可以利用 CommandBuilder 对象自动生成 DataAdapter 的 DeleteCommand、InsertCommand 和 UpdateCommand。为了自动生成命令,必须设置 SelectCommand 属性,这是最低的要求。SelectCommand 所检索的表架构 确定自动生成的 INSERT、UPDATE 和 DELETE 语句的语法。如果在自动生成插入、更新或删除命令后修改 SelectCommand 的 CommandText,则可能会发生异常。如果已修改的 SelectCommand.CommandText 所包含的架构信息与自动生成插入、更新或删除命令时所使用的 SelectCommand.CommandText 不一致,则以后对 DataAdapter.Update 方法的调用可能会试图访问 SelectCommand 引用的当前表中已不存在的列,并且会引发异常。可以通过调用 CommandBuilder 的 RefreshSchema 方法来刷新 CommandBuilder 用来自动生成命令的架构信息。对于DbDataAdapter.Update 方法更新数据库,每次在调用DbDataAdapter.Update(ds) 之后一定要ds.acceptchanges否则会对后面用到的ds出现意想不到的错误。郁闷~ 改了一天的程序,才发现是这个错误,太郁闷了~~2. SqlCommandBuilder会自动生成更新、修改、删除的sql语句,进行更新。3.当表中没有主键时,自动生成的SQL语句进行UPDate时,会出现异常信息。异常信息为:用SqlCommandBuilder更新DataSet,遇到“对于不返回任何键列信息的 SelectCommand 不支持 UpdateCommand 的动态 SQL 生成”问题。4.解决办法:1.??? 修改表的定义,定义一个主键;2.??? 为SqlDataAdapter指定UpdateCommand(DeleteCommand,InsertCommand应该也一样);例子:1.string emailSql=select email,validFlag from emailMe;DataSet emailAdd=new DataSet();SqlDataAdapter emailAdapter=new SqlDataAdapter(emailSql,myConn);SqlCommandBuilder cb=new SqlCommandBuilder(emailAdapter);emailAdapter.Fill(emailAdd,address);myConn.Close();DataTable myDt=emailAdd.Tables[address];myDt.PrimaryKey=new DataColumn[]{myDt.Columns[email]};......//修改myDs数据emailAdapter.Update(emailAdd,address);自动生成SQL语句。2.?? string emailSql=select email,validFlag from emailMe;DataSet emailAdd=new DataSet();SqlDataAdapter emailAdapter=new SqlDataAdapter(emailSql,myConn);SqlCommandBuilder cb=new SqlCommandBuilder(emailAdapter);SqlCommand upCmd=new SqlCommand(update [+strTableName+] set validFlag=@validFlag where email

文档评论(0)

jdy261842 + 关注
实名认证
内容提供者

分享好文档!

1亿VIP精品文档

相关文档