简单实用的DataSet更新数据库的类 总结(c#)

合集下载

使用DataTable更新数据库(增,删,改)

使用DataTable更新数据库(增,删,改)

使⽤DataTable更新数据库(增,删,改)1、修改数据复制代码代码如下:DataRow dr = hRDataSet.Tables["emp"].Rows.Find(textBox3.Text);//DataRow dr = hRDataSet.Tables["emp"].Select("id="+textBox3.Text)[0];dr.BeginEdit();dr["name"] = textBox1.Text;dr.EndEdit();SqlCommandBuilder cmd=new SqlCommandBuilder(empTableAdapter);empTableAdapter.Update(hRDataSet);this.empTableAdapter.Fill(this.hRDataSet.emp);2、插⼊数据复制代码代码如下:DataSet ds = new DataSet();using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["db"].ConnectionString)) {String sql = "select id,name,age from emp";SqlDataAdapter adp = new SqlDataAdapter(sql, conn);adp.Fill(ds);DataRow dr=ds.Tables[0].NewRow();dr["name"]=txtName.Text;dr["age"] = Convert.ToInt32(txtAge.Text);SqlCommandBuilder cmd=new SqlCommandBuilder(adp);ds.Tables[0].Rows.Add(dr);adp.Update(ds);}3、删除数据复制代码代码如下:DataRow dr = hRDataSet.Tables["emp"].Rows.Find(textBox3.Text);//DataRow dr = hRDataSet.Tables["emp"].Select("id="+textBox3.Text)[0];dr.Delete();SqlCommandBuilder cmd=new SqlCommandBuilder(empTableAdapter);empTableAdapter.Update(hRDataSet);this.empTableAdapter.Fill(this.hRDataSet.emp);。

用SqlDataAdapter.Update(DataSet Ds)更新数据库.

用SqlDataAdapter.Update(DataSet Ds)更新数据库.

一. 用SqlDataAdapter.Update(DataSet Ds)更新数据库.1. DbDataAdapter调用Update 方法时,DataAdapter 将分析已作出的更改并执行相应的命令(INSERT、UPDATE 或DELETE)。

当DataAdapter 遇到对DataRow 的更改时,它将使用InsertCommand、UpdateCommand 或DeleteCommand 来处理该更改。

这样,您就可以通过在设计时指定命令语法并在可能时通过使用存储过程来尽量提高 应用程序的性能。

在调用Update 之前,必须显式设置这些命令。

如果调用了Update 但不存在用于特定更新的相应命令(例如,不存在用于已删除行的DeleteCommand),则将引发异常。

但是如果DataTable 映射到单个数据库表或从单个数据库表生成,则可以利用CommandBuilder 对象自动生成DataAdapter 的DeleteCommand、InsertCommand 和UpdateCommand。

为了自动生成命令,必须设置SelectCommand 属性,这是最低的要求。

SelectCommand 所检索的表架构确定自动生成的INSERT、UPDATE和DELETE 语句的语法。

如果在自动生成插入、更新或删除命令后修改SelectCommand 的CommandText,则可能会发生异常。

如果已修改的mandText 所包含的架构信息与自动生成插入、更新或删除命令时所使用的mandText 不一致,则以后对DataAdapter.Update 方法的调用可能会试图访问SelectCommand 引用的当前表中已不存在的列,并且会引发异常。

可以通过调用CommandBuilder的RefreshSchema 方法来刷新CommandBuilder 用来自动生成命令的架构信息。

对于DbDataAdapter.Update 方法更新数据库,每次在调用DbDataAdapter.Update(ds) 之后一定要ds.acceptchanges否则会对后面用到的ds出现意想不到的错误。

简单实用的DataSet更新数据库的类总结(c#).

简单实用的DataSet更新数据库的类总结(c#).

以前经常用sql语句(update)更新数据库,有使用用起来不是很方便,特别是数据量比较大的情况下(比如数据表)很麻烦~~后来感觉用DataSet更新数据库是不错的选择.于是急着写了一个用ataSet更新数据库的类如下:(后面有使用说明,总结) using System; using System.Data; using System.Data.SqlClient; using System.Windows.Forms; namespace winApplication { public class sqlAccess { //与SQL Server的连接字符串设置 private string _connString; private string _strSql; private SqlCommandBuilder sqlCmdBuilder; private DataSet ds = new DataSet(; private SqlDataAdapter da; public sqlAccess(string connString,string strSql{ this._connString=connString; } private SqlConnection GetConn( { try { SqlConnection Connection = new SqlConnection(this._connString; Connection.Open(; return Connection; } catch (Exception ex { MessageBox.Show(ex.Message,"数据库连接失败"; throw; } } //根据输入的SQL语句检索数据库数据 public DataSet SelectDb(string strSql,string strTableName { try { this._strSql = strSql; this.da = newSqlDataAdapter(this._strSql,this.GetConn(; this.ds.Clear(; this.da.Fill(ds,strTableName; return ds;//返回填充了数据的DataSet,其中数据表以strTableName给出的字符串命名 } catch (Exception ex { MessageBox.Show(ex.Message,"数据库操作失败"; throw; } } //数据库数据更新(传DataSet和DataTable的对象 public DataSet UpdateDs(DataSet changedDs,string tableName { try { this.da = newSqlDataAdapter(this._strSql,this.GetConn(; this.sqlCmdBuilder = new SqlCommandBuilder(da; this.da.Update(changedDs,tableName;changedDs.AcceptChanges(; return changedDs;//返回更新了的数据库表 } catch (Exception ex { MessageBox.Show(ex.Message,"数据库更新失败"; throw; } } 使用说明总结: 1. GetConn方法创建一个数据库连接,返回SqlConnection。

DataSet用法详细 DataSet经典教程,很详细,值得一看

DataSet用法详细  DataSet经典教程,很详细,值得一看
C#:DataSet 用法详解 第 1 页
DataSet 用法详细
一、特点介绍
1、处理脱机数据,在多层应用程序中很有用。 2、可以在任何时候查看 DataSet 中任意行的内容,允许修改查询结果的方法。 3、处理分级数据 4、缓存更改 5、XML 的完整性:DataSet 对象和 XML 文档几乎是可互换的。
C#:DataSet 用法详解 第 2 页
DataTable 对象只能存在于至多一个 DataSet 对象中。如果希望将 DataTable 添加到多个 DataSet 中,就必须使用 Copy 方法或 Clone 方法。Copy 方法创建一个与原 DataTable 结构相同并且包含相同 行的新 DataTable;Clone 方法创建一个与原 DataTable 结构相同,但没有包含任何行的新 DataTable。 ③为 DataTable 添加列
⑧遍历 DataSet
foreach(DataTable dt in dataSet.Tables) foreach(DataRow dr in dt.Rows) foreach(DataColumn dc in dr.Table.Columns) Console.WriteLine(dr[dc]);
//推荐使用这种方式 DataRow rowCustomer; rowCustomer = ds.Tables["Custoemrs"].Rows.Find("ANTON"); if(rowCustomer == null)
C#:DataSet 用法详解 第 3 页 //没有查找客户 else { rowCustomer.BeginEdit(); rowCustomer["CompanyName"] ="NewCompanyName"; rowCustomer["ContactName"] ="NewContactName"; rowCustomer.EndEdit(); } //null 表示不修改该列的数据 obejct[] aCustomer ={null,"NewCompanyName","NewContactName",null} DataRow rowCustomer; rowCustomer = ds.Tables["Customers"].Rows.Find("ALFKI"); rowCustomer.ItemArray = aCustomer;

C#使用DataSetDatatable更新数据库的三种实现方法

C#使用DataSetDatatable更新数据库的三种实现方法

C#使⽤DataSetDatatable更新数据库的三种实现⽅法本⽂以实例形式讲述了使⽤DataSet Datatable更新数据库的三种实现⽅法,包括CommandBuilder ⽅法、DataAdapter 更新数据源以及使⽤sql语句更新。

分享给⼤家供⼤家参考之⽤。

具体⽅法如下:⼀、⾃动⽣成命令的条件 CommandBuilder ⽅法a)动态指定 SelectCommand 属性b)利⽤ CommandBuilder 对象⾃动⽣成 DataAdapter 的 DeleteCommand、InsertCommand 和 UpdateCommand。

c)为了返回构造 INSERT、UPDATE 和 DELETE 。

SQL CommandBuilder 必须执⾏ SelectCommand。

即:必须额外经历⼀次到数据源的⾏程,这可能会降低性能。

这也是⾃动⽣成命令的缺点。

d)SelectCommand 还必须返回⾄少⼀个主键或唯⼀列.当CommandBuilder和DataAdapter关联时,就会⾃动⽣成DeleteCommand、InsertCommand 和 UpdateCommand中为空的命令。

即不空的不⽣成。

e)必须是⼀个表,SELECT的不能是多个表的联合。

动⽣成命令的规则:在数据源处为表中所有 RowState 为 Added 的⾏插⼊⼀⾏(不包括标识、表达式或时间戳等列)。

为 Modified 的⾏更新⾏(列值匹配⾏的主键列值) 。

Deleted 的⾏删除⾏(列值匹配⾏的主键列值).这就是为什么要求条件c.d注意:a)因为从SELECT数据到UPDATE数据,中间这段时间有可能别的⽤户已经对数据进⾏了修改。

⾃动⽣成命令这种UPDATE只对在⾏包含所有原始值并且尚未从数据源中删除时更新。

b)⾃动命令⽣成逻辑为独⽴表⽣成 INSERT、UPDATE 或 DELETE 语句,⽽不考虑与数据源中其他表的任何关系。

C#与数据库访问技术总结(十六)之DataSet对象

C#与数据库访问技术总结(十六)之DataSet对象

C#与数据库访问技术总结(⼗六)之DataSet对象DataSet对象DataSet对象可以⽤来存储从数据库查询到的数据结果,由于它在获得数据或更新数据后⽴即与数据库断开,所以程序员能⽤此⾼效地访问和操作数据库。

并且,由于DataSet对象具有离线访问数据库的特性,所以它更能⽤来接收海量的数据信息。

DataSet对象概述DataSet是中⽤来访问数据库的对象。

由于其在访问数据库前不知道数据库⾥表的结构,所以在其内部,⽤动态XML的格式来存放数据。

这种设计使DataSet能访问不同数据源的数据。

DataSet对象本⾝不同数据库发⽣关系,⽽是通过DataAdapter对象从数据库⾥获取数据并把修改后的数据更新到数据库。

在DataAdapter的讲述⾥,就已经可以看出,在同数据库建⽴连接后,程序员可以通过DataApater对象填充(Fill)或更新(Update)DataSet对象。

.NET的这种设计,很好地符合了⾯向对象思想⾥低耦合、对象功能唯⼀的优势。

如果让DataSet对象能直接连到数据库,那么DataSet对象的设计势必只能是针对特定数据库,通⽤性就⾮常差,这样对DataSet的动态扩展⾮常不利。

由于DataSet独⽴于数据源,DataSet可以包含应⽤程序本地的数据,也可以包含来⾃多个数据源的数据。

与现有数据源的交互通过DataAdapter来控制。

DataSet对象常和DataAdapter对象配合使⽤。

通过DataAdapter对象,向DataSet中填充数据的⼀般过程是:(1)创建DataAdapter和DataSet对象。

(2)使⽤DataAdapter对象,为DataSet产⽣⼀个或多个DataTable对象。

(3)DataAdapter对象将从数据源中取出的数据填充到DataTable中的DataRow对象⾥,然后将该DataRow对象追加到DataTable对象的Rows集合中。

C#中DataSet类的使用

C#中DataSet类的使⽤DataSet类是中最核⼼的成员之⼀,也是各种开发基于.Net平台程序语⾔开发数据库应⽤程序最常接触的类。

每⼀个DataSet都有很多个DataTables和Relationships。

RelationShip应该也是⼀种表,特殊的是,这个表只是⽤来联系两个数据表的。

每⼀个DataTable都有很多datarows和datacols, 也包括ParentRelations,ChildRelations 和⼀些限制条件像主键不可以重复的限制。

DataSet每⼀⾏有⼀个RowState属性。

主要是反映当前⾏是否已经被删掉了,被更新了,还是本没变。

有如下的⼏个选项: Deleted, Modified, New, and Unchanged。

对DataSet的任何操作,都是在计算机缓存中完成的。

在从数据库完成数据抽取后,DataSet就是数据的存放地,它是各种数据源中的数据在计算机内存中映射成的缓存,所以有时说DataSet 可以看成是⼀个数据容器。

DataSet对象是⼀个可以⽤XML形式表⽰的数据视图,是⼀种数据关系视图。

DataSet使⽤⽅法⼀般有三种:1.把数据库中的数据通过DataAdapter对象填充DataSetDataAdapter填充DataSet的过程分为⼆步:⾸先通过DataAdapter的SqlCommand属性从数据库中检索出需要的数据。

SqlCommand其实是⼀个Command对象。

然后再通过DataAdapter的Fill⽅法把检索来的数据填充DataSet。

2.通过DataAdapter对象操作DataSet实现更新数据库DataAdapter是通过其Update⽅法实现以DataSet中数据来更新数据库的。

当DataSet实例中包含数据发⽣更改后,此时调⽤Update⽅法,DataAdapter 将分析已作出的更改并执⾏相应的命令(INSERT、UPDATE 或 DELETE),并以此命令来更新数据库中的数据。

C#中DataSet的基本用法

C# DataSet的基本用法首先我们需要打开一个联结:string MyConnString = "Driver={Microsoft Access Driver (*.mdb)}; DBQ=c:/test/test.mdb;";string strComm = "select * from UserList";ADOConnection MyConnection = new ADOConnection(MyConnString);ADODataSetCommand MyComm = newADODataSetCommand(strComm,MyConnection);这里我们为了讲解方便,只在dataset存入一个表的内容:DataSet MyDataSet = new DataSet();MyComm.FillDataSet(MyDataSet,"UserList");此时我们就获得了一个拥有UserList表数据的DataSet。

在讲解DataSet 之前,我们还需要了解DataSet的结构下面是DataSet的结构树DataSetRelationsCollectionExtendedPropertiesTablesCollectionDataTablesRowsColumns其它由于我们研究的是DataTable,其它的我们暂时不管他们。

一个DataSet中包含多个DataTable,一个DataTable又包含有多个Row,这就是我们操作DataSet的基础啦:)添加数据添加一数据,从上面的列表中我们可以看出,其实就是添加一行row,这里我们也来演示一下如何添加一行数据,我们程序一切以dataset为顶点,呵呵,如果tablescollection,rowscollection下去的话,还有一些烦人的dt.acceptchanges这些方法的调用,很烦人,还是一次搞定吧。

在C#中更新数据库(一)

在C#中更新数据库(⼀)这段时间⼀直在学习C#winform中的数据库编程,⼀直没有搞清楚怎么样进⾏数据库的更新操作,只是知道简单的查看数据库,哎,旁边没有⼈学.net的好痛苦呀,什么事情都只能⾃⼰弄,连⼀个⼈讨论的都没有,还好在⽹上认识⼀个兄弟,有什么问题还可以问他。

现在弄清楚了其中⼀种最简单的数据库的添加与更新⽅法。

今天终于弄清楚了怎么样⽤DataSet对数据库进⾏更新了,总结如下:要操作DataSet进⾏数据库的添加,更新和删除,必须弄清楚⼏个类:SqlDataAdapter类,SqlCommandBuilder类等等。

*SqlDataAdapter类:表⽰⽤于填充和更新 SQL Server 数据库的⼀组数据命令和⼀个数据库连接。

和 SQL Server 之间的桥接器,⽤于检索和保存数据。

SqlDataAdapter通过对数据源使⽤适当的 Transact-SQL 语句映射(它可更改DataSet中的数据以匹配数据源中的数据)和(它可更改数据源中的数据以匹配DataSet中的数据)来提供这⼀桥接。

其实通俗点来讲,这个类的作⽤就是将数据库中的数据捆绑到DataSet中,然后对DataSet进⾏操作。

⽽DataSet可以看成是数据库中找出的⼏个表在内存中临时存放的地⽅。

它不需要⼀直和数据库建⽴连接,这样可以保证服务器不会受很⼤的负担,因为SqlDataAdapter类中的⽅法有很好的特性:如果没有使⽤conn.open(),那么fill()语句执⾏时会打开conn,然后使⽤完了以后关闭conn,如果我使⽤了conn.open()那么,fill()语句执⾏以后也不会关闭连接,因为可能有其他的语句需要在连接的情况下执⾏,此时需要⼿⼯关闭连接.对DataSet中表的修改也就是对数据库中表的修改,但是还是要有特定的命令SqlCommandBuilder。

*SqlCommandBuilder类:⾃动⽣成具有以下⽤途的单表命令:使对所做的更改与关联的 SQL Server 数据库相协调。

C#2010 更新DataSet

C#2010 更新DataSet数据库的更新要用到DataAdapter适配器的Update()方法,DataAdapter的Update()方法可以用来将DataSet中的更改解析回数据源。

与Fill()方法类似,Update 方法将DataSet的实例和可选的DataTable对象或DataTable名称用作参数。

DataSet 实例包含已做出更改的DataSet,而DataTable标识从其中检索更改的表。

如果DataTable映射到单个数据库表或从单个数据库表生成,则可以利用CommandBuilder对象自动生成DataAdapter的DeleteCommand、InsertCommand和UpdateCommand来更新DataSet,但多表时,就只能使用显示更新设置DataAdapter 的UpdateCommand来更新DataSet。

DataAdapter调用Update()方法时,DataAdapter将分析已做出的更改并执行相应的命令,包括INSERT、UPDATE或DELETE。

当DataAdapter遇到对DataRow 的更改时,它会将InsertCommand、UpdateCommand或DeleteCommand来处理该更改,这样就可以通过在设计时指定命令语法。

下面的实例就将演示如何通过显示设置DataAdapter的UpdateCommand来执行对已修改行的更新,代码如下所示。

public static void UpdateDataSet(){using(SqlConnection sqlconn = new SqlConnection(ConfigurationManager.ConnectionStri ngs["ConnectionString"].ConnectionString)){SqlDataAdapter sda = new SqlDataAdapter("select * from Employee", sqlconn);sda.UpdateCommand = new SqlCommand("update Employee set EmpName=@Emp Name where EmpId=@EmpId",sqlconn);SqlParameter sparam = sda.UpdateCommand.Parameters.Add("@EmpId",SqlDbType. Int);sparam.SourceColumn = "EmpId";//Original表示该行原始数据sparam.SourceVersion = DataRowVersion.Original;sda.UpdateCommand.Parameters.Add("@EmpName",SqlDbType.VarChar,50,"EmpNam e");DataSet ds = new DataSet();sda.Fill(ds,"Employee");DataRow dr = ds.Tables["Employee"].Rows[0];dr["EmpName"] = "王文英";sda.Update(ds,"Employee");Console.WriteLine("编号:"+dr["EmpId"]+"---姓名:"+dr["EmpName"]);Console.WriteLine("员工名称修改成功!");Console.ReadLine();}}然后,在Main()方法中调用该方法。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
page 1
throw; } } //数据库数据更新(传DataSet和DataTable的对象) public DataSet UpdateDs(DataSet changedDs,string tableName) { try { this.da = new SqlDataAdapter(this._strSql,this.GetConn()); this.sqlCmdBuilder = new SqlCommandBuilder(da); this.da.Update(changedDs,tableName); changedDs.AcceptChanges(); return changedDs;//返回更新了的数据库表 } catch (Exception ex) { MessageBox.Show(ex.Message,"数据库更新失败"); throw; } } 使用说明总结: 1. GetConn方法创建一个数据库连接,返回SqlConnection。 2.使用的select命令中必须包含主键,这点大家都知道的! 3. this.da.Fill(ds,strTableName) 填充数据集 4.构造CommandBuilder对象时,将DataAdapter对象作为构造函数参数传入: this.sqlCmdBuilder = new SqlCommandBuilder(da); 5. 在调用UpdateDs()更新数据库前,请检查changedDs是否已经被更新过,用c hangedDs.[tableName] GetChanges() != null; 6.用this.da.Update(changedDs,tableName)方法更新数据,然后调用changedDs .AcceptChanges()才能真正的更新数据库,调用 changedDs.RejectChanges() 取消更
本文由lsjhn110贡献 以前经常用sql语句(update)更新数据库,有使用用起来不是很方便,特别是 数据量比较大的情况下(比如数据表)很麻烦 ̄ ̄后来感觉用DataSet更新数据库是不错 的选择.于是急着写了一个用ataSet更新数据库的类 如下:(后面有使用说明,总结) using System; using System.Data; using System.Data.SqlClient; using System.Windows.Forms; namespace winApplication { public class sqlAccess { //与SQL Server的连接字符串设置 private string _connString; private string _strSql; private SqlCommandBuilder sqlCmdBuilder; private DataSet ds = new DataSet(); private SqlDataAdapter da; public sqlAccess(string connString,string strSql) { this._connString=connString; } private SqlConnection GetConn() { try { SqlConnection Connection = new SqlConnection(this._connString); Connection.Open(); return Connection; } catch (Exception ex) { MessageBox.Show(ex.Message,"数据库连接失败"); throw; } } //根据输入的SQL语句检索数据库数据 public DataSet SelectDb(string strSql,string strTableName) { try { this._strSql = strSql; this.da = new SqlDataAdapter(this._strSql,this.GetConn()); this.ds.Clear(); this.da.Fill(ds,strTableName); return ds;//返回填充了数据的DataSet,其中数据表以strTableName给出的字 符串命名 } catch (Exception ex) { MessageBox.Show(ex.Message
相关文档
最新文档