《C#.net程序设计课件》(资料全集)c#9.ppt_第1页
《C#.net程序设计课件》(资料全集)c#9.ppt_第2页
《C#.net程序设计课件》(资料全集)c#9.ppt_第3页
《C#.net程序设计课件》(资料全集)c#9.ppt_第4页
《C#.net程序设计课件》(资料全集)c#9.ppt_第5页
已阅读5页,还剩67页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第九章 数据库编程,C#.net程序设计,本章主要内容,ADO.NET结构 .NET框架数据提供程序 DataSet数据集与DataTable相关类 TableAdapter查询 Windows 窗体数据控件 数据访问可视化编程,设计ADO.NET的目的,新的应用程序越来越松散地耦合,通常基于Web应用程序模型。Web应用程序将HTTP用作在层间进行通信的结构,必须显式处理请求之间的维护状态。这一新模型大大不同于连接、紧耦合的编程风格,此风格曾是客户端/服务器时代的标志。在紧耦合编程风格中,连接会在程序的整个生存期中保持打开,而不需要对状态进行特殊处理。 设计ADO.NET的目的是为了满足这一

2、新编程模型的新要求:具有断开式数据结构;能够与XML紧密集成;具有能够组合来自多个不同数据源数据的通用数据表示形式;以及具有与数据库交互的优化功能。,ADO.NET概述,ADO.NET结构,ADO.NET可以访问和处理数据的两个组件是:.NET框架数据提供程序和DataSet。.NET框架数据提供程序用于连接到数据库、执行命令和检索结果的。DataSet对象也可以独立于.NET框架数据提供程序使用,以管理应用程序本地的数据或源自XML的数据。,ADO.NET概述,.NET框架数据提供程序,.NET框架数据提供程序使用四个核心对象进行数据处理,除上表列出的核心类之外,.NET框架数据提供程序还包

3、含CommandBuilder,Transaction,和Parameter等类。,ADO.NET概述,下面示例显示如何使用SQL Server.NET框架数据提供程序连接到Microsoft SQL Server的Northwind示例数据库,并使用SqlDataReader从Orders表返回记录列表。 using System.Data.SqlClient; string connectionString = Data Source=.SqlExpress; Initial Catalog=Northwind;Integrated Security=True; SqlConnection

4、 connection = new SqlConnection(connectionString); string queryString = SELECT OrderID, CustomerID FROM dbo.Orders; SqlCommand command =new SqlCommand(queryString, connection); connection.Open();/执行SqlCommand必须打开。 SqlDataReader reader = command.ExecuteReader(); while (reader.Read()/ 取数据前调用Read /*使用索

5、引,按给定列序号获取指定列值,在给定列名称的获取指定列值*/ Console.WriteLine(0,1, reader0, reader1); reader.Close();/必须关闭,command才可执行下个命令。 connection.Close();/必须关闭连接,.Net框架数据提供程序比较,不同的数据库数据处理将使用不同的数据提供程序: OLE DB .NET框架数据提供程序 ODBC .NET框架数据提供程序 Oracle .NET框架数据提供程序 SQL SERVER .NET框架数据提供程序 这些NET框架数据提供程序的类是一一对应的,如下图: SQL Server 与OL

6、E DB .NET框架 数据提供程序类比较,ADO.NET概述,只需将SQL SERVER .NET框架数据提供程序的类名的前面的Sql更换成OleDb,Oracle或Odbc,添加各自的命名空间如OleDb,使用using System.Data.OleDb;除此之外,一个关键的不同是Connection中的连接字符串,其他就完全相同。 下面示例显示如何使OLE DB .NET连接到Microsoft Access Northwind 示例: using System.Data.OleDb; string connectionString = Provider=Microsoft.Jet.O

7、LEDB.4.0;Data Source= +e:c#.netchapter9Northwind.mdb;User Id=admin;Password=; OleDbConnection connection = new OleDbConnection(connectionString) string queryString = SELECT OrderID, CustomerID FROM dbo.Orders; OleDbCommand command = connection.CreateCommand(); connection.Open();/执行SqlCommand必须打开。 Ol

8、eDbDataReader reader = command.ExecuteReader(); while (reader.Read()/ 取数据前调用Read /*使用索引,按给定列序号获取指定列值,在给定列名称的获取指定列值*/ Console.WriteLine(0,1,reader0, reader1); ,下面示例显示如何使用ODBC.NET框架 数据提供程序 (System.Data.ODBC)连接到Microsoft Access Northwind 示例数据库,并使用OdbcDataReader从Orders表返回记录列表。 using System.Data.Odbc; st

9、ring connectionString = Driver=Microsoft Access Driver (*.mdb); + Dbq=e:c#.netchapter9Northwind.mdb;Uid=Admin;Pwd=; OdbcConnection connection = new OdbcConnection(connectionString) string queryString = SELECT OrderID, CustomerID FROM dbo.Orders; OdbcCommand command = connection.CreateCommand(); conn

10、ection.Open();/执行SqlCommand必须打开。 OdbcDataReader reader = command.ExecuteReader(); while (reader.Read()/ 取数据前调用Read /使用索引,按给定列序号获取指定列值,在给定列名称的获取指/定列值 Console.WriteLine(0,1, reader0, reader1); ,Connection类建立连接,抽象DbConnection类表示到数据库的连接,实现了IDbConnection接口。以下是DbConnection类在不同数据提供程序中的子类: System.Data.Commo

11、n.DbConnection/以下是不同子类System.Data.Odbc.OdbcConnection System.Data.OleDb.OleDbConnection System.Data.OracleClient.OracleConnection System.Data.SqlClient.SqlConnection SqlConnection类表示一个到SQL Server数据库的连接,需要把程序集System.Data.dll添加到项目的引用中,才可以使用这个类,一般项目默认包含。 通过添加using System.Data.SqlClient;可以方便地使用SQL Serve

12、r .NET框架 数据提供程序的各种对象.,.NET框架数据提供程序,Connection类建立连接,创建SqlConnection对象代码如下: string connectionString = Data Source=.SqlExpress;Initial Catalog=Northwind; Integrated Security=True SqlConnection connection = new SqlConnection(connectionString); SqlConnection类最重要属性是ConnectionString连接字符串,构成如下: Data Source=

13、.SqlExpress;” 表示连接本地服务器上的SQL Server Express数据库。其中“.” 表示本地服务器。 “Initial Catalog=Northwind;”表示数据库名称Northword。 “Integrated Security= True; 表示连接登录身份验证使用 Windows 身份验证.,.NET框架数据提供程序,Connection类建立连接,“Integrated Security= False;”是默认值,表示使用SQL Server身份验证登录。 “User ID=用户;Password=密码;”表示SQL Server用户和密码。 如连接字符串Da

14、ta Source=.;Initial Catalog=Northwind;User ID=sa;Password=pass;”,表示本地服务器SQL Server Northwind数据库,使用SQL Server身份验证登录,SQL Server的用户和密码分别为sa和pass。 使用OledbConnection类连接Access数据库的ConnectionString连接字符串如下: string connectionString = Provider=Microsoft.Jet.OLEDB.4.0;Data Source= +e:c#.netchapter6Northwind.mdb

15、;User Id=admin;Password=;,.NET框架数据提供程序,使用命令Command类,抽象DbCommand 类表示要对数据库执行的 SQL 语句或存储过程。它为数据库执行命令提供一个基类。以下是DbCommand 类在不同数据提供程序中命令子类: System.Data.Odbc.OdbcCommand System.Data.OleDb.OleDbCommand System.Data.OracleClient.OracleCommand System.Data.SqlClient.SqlCommand 抽象DbCommand类实现了IDbCommand接口,IDbCom

16、mand接口表示连接到数据库时执行的SQL命令。 SqlCommand表示将在SQLServer中执行的TransactSQL语句或存储过程。,.NET框架数据提供程序,使用命令Command类,SqlCommand需要设置的属性有: Connection属性,即SqlCommand使用的连接。 CommandText属性,SqlCommand将要执行的命令语句。 CommandType属性,解释CommandText的类型,支持3种解释方式: Text(默认)方式表示CommandText是Sql查询语句, StoredProcedure方式表示CommandText是一个存储过程的名字,

17、TableDirect方式表示CommandText是表。 Transaction属性设置在SQLServer数据库中处理的Transact-SQL事务级别。 Parameters属性用来设置Sql查询语句或存储过程的参数。,.NET框架数据提供程序,public static void ReadOrderData()/SqlCommandSample项目 string connectionString = Data Source=.SqlExpress;Initial Catalog=Northwind; Integrated Security=True; string queryStrin

18、g = SELECT OrderID, CustomerID FROM dbo.Orders; using (SqlConnection connection = new SqlConnection(connectionString) /使用using时,将在using代码块结束时调用connection.close(); SqlCommand command =new SqlCommand(queryString, connection); connection.Open();/执行SqlCommand必须打开。 int firstID = (int)command.ExecuteScala

19、r();/返回第一行的第一列 SqlDataReader reader = command.ExecuteReader(); while (reader.Read() /使用索引,按给定列序号获取指定列值,在给定列名称的获取指定列值 Console.WriteLine(0,1,2, firstID,reader0, reader1); reader.Close();/必须关闭,command才可执行下个命令。 command.CommandText=insert into Customers(CustomerID, CompanyName )values(CustomerID,CompanyN

20、ame); command.Parameters.Add(CustomerID, SqlDbType.NChar, 5); command.Parameters.Add(CompanyName, SqlDbType.NVarChar, 40); command.Parameters0.Value = abd; command.ParametersCompanyName.Value = abdCom; int count = command.ExecuteNonQuery();/执行insert命令 ,DbDataReader,抽象DbDataReader类是从数据库读取行的一个只进流。以下是D

21、bDataReader类在不同数据提供程序中的子类: System.Data.Odbc.OdbcDataReader System.Data.OleDb.OleDbDataReader System.Data.OracleClient.OracleDataReader System.Data.SqlClient.SqlDataReader System.Data.Common.DbDataReader 主要实现了以下接口: public abstract class DbDataReader : IDataReader, IDataRecord, IEnumerable 通过调用DBComma

22、nd 对象的ExecuteReader 方法创建一个 DBDataReader,可以从数据库中检索只读、只进的数据流。,.NET框架数据提供程序,DBDataReader类主要属性和方法,.NET框架数据提供程序,static public void RunStoreProc1()/SqlCommandSample项目 SqlConnection connection = new SqlConnection(connectionString); SqlCommand salesCommand=new /SalesByCategory是存储过程名 SqlCommand(“SalesByCateg

23、ory”,connection); salesCommand.CommandType = CommandType.StoredProcedure; connection.Open(); SqlParameter parameter = salesCommand.Parameters.Add( CategoryName, SqlDbType.NVarChar, 15);/创建参数 parameter.Value = Beverages; /执行命令对象中的命令文本并返回SqlDataReader对象 SqlDataReader reader = salesCommand.ExecuteReade

24、r(); Console.WriteLine( 0, 1, reader.GetName(0), reader.GetName(1); /取列名 while (reader.Read() Console.WriteLine(0,$1,reader.GetString(0), reader.GetDecimal(1); reader.Close(); connection.Close();,SalesByCategory存储过程的定义: CREATE PROCEDURE SalesByCategory-存储过程 CategoryName nvarchar(15), OrdYear nvarcha

25、r(4) = 1998 AS IF OrdYear != 1996 AND OrdYear != 1997 AND OrdYear != 1998 SELECT OrdYear = 1998 SELECT ProductName,TotalPurchase=ROUND(SUM(CONVERT(decimal(14,2), OD.Quantity * (1-OD.Discount) *OD.UnitPrice), 0) FROM Order Details OD, Orders O, Products P, Categories C WHERE OD.OrderID = O.OrderID AN

26、D OD.ProductID = P.ProductID AND P.CategoryID = C.CategoryID AND C.CategoryName = CategoryName AND SUBSTRING(CONVERT(nvarchar(22), O.OrderDate, 11), 1, 4) = OrdYear GROUP BY ProductName ORDER BY ProductName,面向接口编程,采用面向接口方法,就是使用IDbConnection,IDbCommand,IDataReader,即将下面语句 SqlCommand command = new SqlC

27、ommand(queryString); 更改为 IDbCommand command = new SqlCommand(queryString);/面向接口方法 面向接口一个显著的优点是,当所连接的数据库发生变化,程序更改较少或无需更改。将SqlCommand,SqlConnection和SqlParameter等更改为OleDbCommand,OleDbConnection和OleDbParameter,即可将数据库从MS Sql Server改为OleDb数据源。如以上语句更改为: IDbCommand command = new OleDbCommand(queryString);,.

28、NET框架数据提供程序,采用面向接口方法编写数据库的查询和添加与修改,代码 : public static void ReadOrderDataInterface() string queryString =SELECT OrderID, CustomerID FROM dbo.Orders; using (IDbConnection connection = new SqlConnection(connectionString) /使用using时,将在using代码块结束时调用connection.close(); IDbCommand command = new SqlCommand(q

29、ueryString); command.Connection=connection; connection.Open();/执行SqlCommand必须打开。 int firstID = (int)command.ExecuteScalar();/返回第一行第一列 IDataReader reader = command.ExecuteReader(); while (reader.Read() /使用索引,按给定列序号获取指定列值,在给定列名称的/获取指定列值 Console.WriteLine(0,1,2, firstID, reader0, reader1); ,reader.Clos

30、e();/必须关闭,command才可执行下个命令。 command.CommandText = insert into Customers(CustomerID, CompanyName) values(CustomerID,CompanyName); IDataParameter dbParamID = new System.Data.SqlClient.SqlParameter(); dbParamID.ParameterName = CustomerID; dbParamID.Value = 995; dbParamID.DbType = System.Data.DbType.Stri

31、ng; command.Parameters.Add(dbParamID); IDataParameter dbParamName = new System.Data.SqlClient.SqlParameter(); dbParamName.ParameterName = CompanyName; dbParamName.Value = 440; dbParamName.DbType = System.Data.DbType.String; command.Parameters.Add(dbParamName); int count = command.ExecuteNonQuery();/

32、执行insert命令 ,DataSet 对象模型,DataSet数据集,可视化创建DataSet数据集控件,创建包括表、约束和表间关系在内的数据集DataSet,有两种方式:可视化数据集控件DataSet和编程方式。 在窗体设计器,双击“工具箱”“数据选项卡”中的DataSet控件或者直接拖放到窗体中,这时会出现“添加数据集”对话框,选中“非类型化数据集”单选按钮,然后单击“确定”按钮就可把一个非类型化数据集对象添加到窗体中, 使用属性窗口设置它的Tables属性和Relation属性,这两个属性都是集合,分别包含数据集中的表和关系,其中Tables属性保存数据集中的所有表(DataTable

33、)。DataSet数据集还包含Relations属性,保存数据集中的所有表关系(DataRelation)。,DataSet数据集,编码创建DataSet类,以下是在DatasetSample项目的Form1.Designer.cs中包含了创建数据集(DataSet)对象部分代码 private System.Data.DataSet dataSet1; private void InitializeComponent() /创建 DataSet 的实例dataSet1 this.dataSet1 = new System.Data.DataSet(); /向数据集实例dataSet1的属性T

34、ables添加 三个表 this.dataSet1.Tables.AddRange(new System.Data.DataTable this.dataTable2,this.dataTable3,this.dataTable1 ); this.dataSet1.DataSetName = NewDataSet;,DataSet数据集,创建DataTable,DataSet由表、关系和约束的集合组成。DataTable对象用于表示DataSet中的表。DataTable表示一个内存中关系数据的表;DataTable的数据可以从数据源(例如Microsoft SQL Server数据库)中导入

35、。 创建DataTable对象的两种方法: 使用DataTable 构造函数创建 DataTable 对象的实例,并为其指定名称“Table1”: DataTable dataTable1 = new DataTable(Table1); 使用数据集DataSet属性Tables集合的Add方法在一个DataSet实例中添加并创建DataTable对象的实例: DataTable workTable = dataSet1.Tables.Add(workTable );,DataSet数据集,DataColumn列对象,表的架构由列和约束表示。使用DataColumn列对象以及 ForeignK

36、eyConstraint 和 UniqueConstraint 约束对象定义 DataTable 的架构。 DataColumn是用于创建 DataTable 架构的列。每个DataColumn 都有DataType属性,该属性确定 DataColumn 所包含的数据类型,默认是string类型。列的AllowDBNull属性确定该列是否允许空值、Unique属性确定该列是否必须是唯一,ReadOnly属性确定该列是否允许更改。 要确保列值的唯一,可将列值设置为在表中添加新行时自动递增。要创建自动递增的 DataColumn,可将列的 AutoIncrement 属性设置为 true。然后,D

37、ataColumn 将从 AutoIncrementSeed 属性中定义的值开始,并且每添加一行,自动递增列的值将按列的 AutoIncrementStep 属性中定义的值递增。,DataSet数据集,DataColumn列对象,以下是创建DataColumn列的两种方法: 使用DataColumn构造函数 private DataColumn dataColumn1 = new DataColumn(Column1);/默认是string类型 this.dataColumn1.AllowDBNull = false;/不允许空值 和通过所在表的属性Columns的Add方法: /以下示例演示

38、创建从值10开始并以5为增量递增,数据类型为Int32的列CustomerID DataColumn workColumn = workTable.Columns.Add(CustomerID, typeof(Int32); workColumn.AutoIncrement = true; workColumn.AutoIncrementSeed = 10; workColumn.AutoIncrementStep = 5;,DataSet数据集,创建DataTable表架构(列和约束),private DataTable dataTable1 = new System.Data.DataTa

39、ble(); /向表dataTable1的属性Columns 添加四个列this.dataTable1.Columns.AddRange(new System.Data.DataColumn this.dataColumn1,this.dataColumn2, this.dataColumn3,this.dataColumn4); this.dataTable1.Constraints.AddRange(new System.Data.Constraint new System.Data.UniqueConstraint(Constraint1, new string Column1, tru

40、e),new System.Data.ForeignKeyConstraint(RelationTable13, Table3, new string Column3, new string Column3, System.Data.AcceptRejectRule.None, System.Data.Rule.Cascade, System.Data.Rule.Cascade);,DataSet数据集,创建DataTable表架构(列和约束),this.dataTable1.PrimaryKey = new System.Data.DataColumn this.dataColumn1; t

41、his.dataTable1.TableName = Table1; 创建 DataTable 时,是没有架构的。要定义表的架构,必须创建 DataColumn 对象并将其添加到表的 Columns 集合中。可以为表定义主键列,用于唯一地标识表中的每一行,用DataTable 的PrimaryKey 属性设置。 为了维护数据的完整性,可以使用约束来对 DataTable 中的数据施加限制,有两种约束:外键ForeignKeyConstraint 和唯一约束UniqueConstraint。默认情况下,通过将关系DataRelation 添加到 DataSet 来创建两个或多个表之间的关系时,两

42、种约束都会自动创建。可以创建 Constraint 约束对象并将其添加到表的 Constraints 集合中。,DataSet数据集,创建DataSet表间关系DataRelation,DataRelations dr = new DataRelations(CustOrders, Dataset1.TablesCustomers.ColumnsCustID, Dataset1.TablesOrders.ColumnsCustID); Dataset1.Relations.Add(dr); 该示例中的第一个参数指定所创建的DataRelation的名称。第二个参数设置父表列DataColumn

43、,第三个参数设置子表列DataColumn。然后将DataRelation添加到DataSet的Relations集合中。 以下是与前面代码等效的代码: DataRelations dr = Dataset1.Relations.Add(CustOrders,/关系名称 Dataset1.TablesCustomers.ColumnsCustID, Dataset1.TablesOrders.ColumnsCustID);,DataSet数据集,DataRow类,DataRow对象是表示DataTable行。使用 DataRow 对象的属性和方法可以查询、插入、删除和更新 DataTable

44、中的值。以下是DataRow主要属性和方法。 属性Item相当与类的索引器,DataRows的属性Item有6个重载,分别使用列序号,列名和DataRowVersion版本来获取或设置指定列的数据:例: currentRow0;/ currentRow行的第一列, currentRowFirstName;/该行“FirstName列值 属性ItemArray 通过一个Object数组来获取或设置此行的所有列的值。 方法AcceptChanges 提交自上次调用 AcceptChanges 以来对该行进行的所有更改 方法RejectChanges 撤消自上次调用 AcceptChanges 以来

45、对该行进行的所有更改。,DataSet数据集,DataRow类,方法BeginEdit 对 DataRow 对象开始编辑操作。 方法CancelEdit 取消对该行的当前编辑。 方法Delete 删除 DataRow。 方法EndEdit 终止发生在该行的编辑。 方法GetChildRows 已重载。 获取 DataRow 的子行。 方法GetParentRow 已重载。 获取 DataRow 的父行。 可以为DataColumn列添加一个 UniqueConstraint,来确保 DataColumn列值是唯一的。,DataSet数据集,DataTable表数据添加,DataRow tabl

46、e1Row = dataTable1.NewRow(); /将数据插入新行 table1RowColumn1 = Smith;table1RowColumn4=10.1; /在将数据插入新行后,Add 方法可用于将行添加到 DataRowCollection dataTable1.Rows.Add(table1Row); 也可以通过传入值的数组(类型化为 Object),调用Add方法来添加新行,如下例所示。 dataTable1.Rows.Add(new Object Smith,1,aa,10.1);,DataSet数据集,数据适配器DataAdapter概述,数据适配器DataAdapt

47、er用于在数据源和数据集之间交换数据。DataAdapter使用Connection对象连接到数据源,使用Command对象从数据源检索数据并填充DataSet中的表,还可对DataSet的数据更改回送数据源。DataAdapter是.NET框架数据提供程序与数据集DataSet的桥梁。 DataAdapter通过Fill方法检索数据填充DataSet数据集的数据以匹配数据源中的数据,使用Update方法将DataSet数据集中的更新数据保存到数据源。 DbDataAdapter类从DataAdapter类继承,是专用于关系数据库的DataAdapter。DbDataAdapter包含4个Db

48、Command属性,分别是SelectCommand、InsertCommand、DeleteCommand、UpdateCommand,对应于4种select,insert,delete和update查询语句。SelectCommand是在Fill方法从数据库检索数据时使用,其他三个用于Update方法保存更新数据库。,数据适配器DataAdapter,SqlDataAdapter,SqlDataAdapter常用的构造函数和方法: 构造函数SqlDataAdapter (string selectCommandText,string selectConnectionString) 其中:参

49、数selectCommandText是SqlDataAdapter的SelectCommand属性使用的SELECT语句或存储过程。selectConnectionString是连接字符串。 Fill方法int Fill(DataSet dataSet,string srcTable) 其中:参数dataSet是数据库的数据将要填充的DataSet。srcTable用于映射数据库的表名称。返回值是已在DataSet中成功添加或刷新的行数。Fill 方法使用SELECT语句从数据库中检索数据。 Update方法int Update(DataSet dataSet) 其中:参数dataSet用于更

50、新数据库的DataSet。返回值为DataSet中成功更新的行数。为DataSet中每个已插入、已更新或已删除的行调用相应的语句更新数据库。,数据适配器DataAdapter,static void updateDataset() SqlDataAdapter dataAdpater = new SqlDataAdapter(SELECT CategoryID, CategoryName FROM Categories, connection); dataAdpater.UpdateCommand = new SqlCommand( UPDATE Categories SET Category

51、Name = CategoryName + WHERE CategoryID = CategoryID, connection); dataAdpater.UpdateCommand.Parameters.Add( CategoryName, SqlDbType.NVarChar, 15, CategoryName); SqlParameter parameter = dataAdpater.UpdateCommand.Parameters.Add( CategoryID, SqlDbType.Int); parameter.SourceColumn = CategoryID; paramet

52、er.SourceVersion = DataRowVersion.Original; DataSet dataSet = new DataSet(); dataAdpater.Fill(dataSet, Categories); DataRow row = dataSet.TablesCategories.Rows0; rowCategoryName = New Category; dataAdpater.Update(dataSet, Categories); ,DataAdapter 的fill与Update方法,SqlDataAdapter的方法fill与Update的其他多种重载:

53、public int Fill (DataTable dataTable)/填充DataTable public int Update (DataTable dataTable) /更新表 adapter.Update(custDS.TablesCustomers); 以上DataSet,DataTable可以使用方法GetChanges()获取DataSet或DataTable 的副本,该副本包含自上次加载以来或自调用 AcceptChanges 以来对该数据集进行的所有更改。如: DataTable xDataTable = custDS.TablesCustomers.GetChange

54、s(); adapter.Update(xDataTable); adapter.Update(custDS.GetChanges(), Customers);,数据适配器DataAdapter,使用CommandBuilder类,使用DataAdapter更新数据源时,需要对其InsertCommand、UpdateCommand和DeleteCommand属性设置相应INSERT、UPDATE或DELETE的sql语句, 因此较为繁琐,可以通过CommandBuilder对象自动生成的这些命令。如果 DataTable 映射到单个数据库表或从单个数据库表生成,并且至少有一个主键或唯一列,则

55、可以利用CommandBuilder对象自动生成DataAdapter 的 DeleteCommand、InsertCommand 和 UpdateCommand。 为了自动生成命令,必须设置SelectCommand属性。SelectCommand 属性决定了DataSet的表架构,因而可推导出INSERT、UPDATE 和 DELETE 语句。 为了返回构造 INSERT、UPDATE 和 DELETE SQL 命令所必需的元数据,CommandBuilder 必须执行 SelectCommand。因此,必须额外经历一次到数据库的访问,这可能会降低性能。,数据适配器DataAdapter,

56、以下示例演示使用SqlCommandBuilder自动生成 INSERT、UPDATE 或 DELETE 语句。下面是SqlDataAdapterSample 项目的testSqlCommandbuilder()方法的代码: static void testSqlCommandbuilder() / 提供了SelectCommand的sql语句 SqlDataAdapter adapter = new SqlDataAdapter( “SELECT * FROM dbo.Customers”, connection); /生成adpter的DeleteCommand、InsertCommand

57、和 UpdateCommand SqlCommandBuilder builder = new SqlCommandBuilder(adapter); DataSet custDS = new DataSet(); adapter.Fill(custDS, Customers); /没有SqlCommandBuilder,下面更改将出错. custDS.TablesCustomers.Rows0City = BerlinA; adapter.Update(custDS, Customers); /需要adpter的UpdateCommand ,数据源创建,数据源可以通过从“数据”菜单或从“数据

58、源”窗口选择“添加新数据源”进行创建。数据源可从数据库、Web 服务以及对象生成。 从数据库创建的数据源,通过运行“数据源配置向导”,选择“数据库”数据源类型,可以从数据库创建数据源,从数据库创建数据源时将添加类型化数据集。 通过运行“数据源配置向导”创建的数据源将出现在“数据源”窗口中,可以在项目中使用这些数据源。这些数据源可以被拖动到 Windows 应用程序中的窗体上,以创建数据控件,并且是绑定数据的控件,即数据控件的数据更改与数据源同步。,类型化数据集与TableAdapter,类型化数据集,数据集分两种:类型化数据集和DataSet数据集,类型化数据集是从 DataSet 派生的类,

59、通过新建数据源创建类型化数据集。类型化数据集的架构(表和列结构)派生自 .xsd 文件,并且容易对其进行编程。在应用程序中既可以使用类型化数据集也可以使用数据集。 创建类型化数据集的方法是运行数据源配置向导,或通过“项目”菜单上的“添加新项”命令来添加“数据集”项。 “数据集设计器”是一套可视化工具,用于创建和编辑类型化数据集和组成数据集的DataTable、TableAdapter、TableAdapter查询、DataColumn 和 DataRelation等。,类型化数据集与TableAdapter,使用类型化数据集创建应用程序,应用程序开发中最常用的方案之一是在 Windows 窗体上显示和管理数据库中的数据。通过从“数据源”窗口将表等对象拖动到窗体上,可以在 Windows 应用程序中的窗体上显示和管理数据。本例演示如何创建显示数据库中两个相关表数据的应用程序。本例主要完成如下任务: 创建 Windows 应用程序。 使用数据源配置向导,基于 North

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论