C#和ADONET数据库开发技术.ppt_第1页
C#和ADONET数据库开发技术.ppt_第2页
C#和ADONET数据库开发技术.ppt_第3页
C#和ADONET数据库开发技术.ppt_第4页
C#和ADONET数据库开发技术.ppt_第5页
已阅读5页,还剩105页未读 继续免费阅读

下载本文档

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

文档简介

第8章,C#和ADO.NET数据库 应用程序开发技术,内容提要,C# 语言简介,.NET标准控件,ADO.NET 数据访问,数据绑定技术,应用实例,C#语言简介,C#(C Sharp)是微软(Microsoft)为.NET Framework量身订做的程序语言,C#拥有C/C+的强大功能以及Visual Basic简易使用的特性,和C+与Java一样,是面向对象的 (object-oriented)程序设计语言。 C#语言的数据类型主要分为两类: 值类型和引用类型。,值类型的变量本身包含他们的数据,而引用类型的变量包含的是指向包含数据的内存块的引用。,值类型和引用类型,C#中的数据类型分为两个基本类别,值类型 表示实际数据 只是将值存放在内存中 值类型都存储在堆栈中 int、char、结构 引用类型 表示指向数据的指针或引用 包含内存堆中对象的地址 为 null,则表示未引用任何对象 类、接口、数组、字符串,枚举类型,枚举是一组已命名的整型常量,用关键字enum声明枚举类型。例如: enum Days Mon, Tue, Wed, Thu, Fri ,Sat, Sun ;,理解枚举的一个关键点是:每一个符号代表一个整型值,而且每个符号的值都比其前面的符号值大1。默认时,第一个枚举符号的值为0。,枚举常量能够用于任何可以使用整型值的地方。,通过其类型名和点运算符就可以访问枚举成员。,值类型和引用类型的区别,如果我们创建两个值类型变量 i 和 j,比如: int i = 10; int j = 20;,则 i 和 j 彼此完全独立,并且分配了不同的内存位置:如果我们改变这些变量中的某一个的值,另一个自然不会受到影响。,然而,引用类型的做法却不同。例如,我们可以这样声明两个变量: class myclass myClass a = new myClass(); myClass b = a;,第一行在内存中创建了 myClass 的一个实例,并且将 a 设置为引用该实例。因此,当我们将 b 设置为等于 a 时,它就包含了对内存中类的引用的重复。如果我们现在改变 b 中的属性,a 中的属性就将反映这些改变,因为这两者都指向内存中的相同对象,,数组,数组是同一数据类型的一组值 数组属于引用类型,因此存储在堆内存中 数组元素初始化或给数组元素赋值都可以在声明数组时或在程序的后面阶段中进行 语法: 数据类型元素个数 数组名称; int6 arrayHere;,类,类是面向对象编程的基本单位,是一种包含数据成员、函数成员和嵌套类型的数据结构。类的数据成员有常量、字段和事件。函数成员包括方法、属性、构造函数和析构函数。类和结构同样都包含了自己的成员,但它们之间最主要的区别在于:类是引用类型,而结构是值类型。 类支持继承机制,通过继承,派生类可以扩展基类的数据成员和函数方法,进而达到代码重用和设计重用的目的。,类的定义,class point public double x; public double y; public double calslope() return x / y; ,数据成员(字段),函数成员(方法),类的使用,static void Main(string args) double slp; point point1=new point(); point1.x = 3; point1.y = 2; slp=point1.calslope(); Console.Write(slp); Console.Read(); ,将字段封装为属性,class point private double x; private double y; public double x_coordinate get return x; set x = value; public double y_coordinate get return y; set y = value; ,public double calslope() return x / y; ,也可以将calslope方法改为属性,slope get return x/y; 此属性为只读属性,因为只有get 没有set部分。 slp=point1.slope;,构造函数,构造函数是一种特殊的方法,主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用。 public point(double xx, double yy) x = xx; y = yy; ,构造函数名总是和类名相同。 构造函数无返回值。 构造函数不能被直接调用,必须通过new运算符在创建对象时才会自动调用 。 构造函数可以用来强制初始化变量。,point point1=new point(3,2);,类成员的作用域,在 Class 块中,成员通过相应的声明语句被声明为 Private 或 Public。被声明为 Private 的将只在 Class 块内是可见的。被声明为 Public 不仅在 Class 块的内部是可见的,对 Class 块之外的代码也是可见的。没有使用 Private 或 Public 明确声明的被默认为 Public。,.net 标准控件,窗体控件 文本类控件(label, textbox) 按钮类控件(button,radiobutton,checkbox) 列表类控件(listbox,combobox) 分组框和面板,窗体常用属性(1),Name属性:用来获取或设置窗体的名称,在应用程序中可通过Name属性来引用窗体。 WindowState属性: 用来获取或设置窗体的窗口状态。 取值有三种: Normal (窗体正常显示)、 Minimized(窗体以最小化形式显示)和 Maximized(窗体以最大化形式显示)。 Text属性:该属性是一个字符串属性,用来设置或返回在窗口标题栏中显示的文字。,窗体常用属性(2),ControlBox属性:用来获取或设置一个值,该值指示在该窗体的标题栏中是否显示控制框。值为true时将显示控制框,值为false时不显示控制框。 MaximizeBox属性:用来获取或设置一个值,该值指示是否在窗体的标题栏中显示最大化按钮。值为 true时显示最大化按钮,值为false时不显示最大化按钮。 MinimizeBox 属性:用来获取或设置一个值,该值指示是否在窗体的标题栏中显示最小化按钮。值为 true时显示最小化按钮,值为false时不显示最小化按钮。,窗体常用方法,Show方法:该方法的作用是让窗体显示出来,其调用格式为: 窗体名.Show(); Hide方法:该方法的作用是把窗体隐藏出来,其调用格式为: 窗体名.Hide(); Refresh方法:该方法的作用是刷新并重画窗体,其调用格式为: 窗体名.Refresh(); Activate方法:该方法的作用是激活窗体并给予它焦点。其调用格式为: 窗体名.Activate(); Close方法:该方法的作用是关闭窗体。其调用格式为: 窗体名.Close(); ShowDialog方法:该方法的作用是将窗体显示为模式对话框。其调用格式为: 窗体名.ShowDialog();,窗体常用事件,Load事件:该事件在窗体加载到内存时发生,即在第一次显示窗体前发生。 Activated事件:该事件在窗体激活时发生。 Deactivate事件:该事件在窗体失去焦点成为不活动窗体时发生。 Resize事件:该事件在改变窗体大小时发生。 Paint事件:该事件在重绘窗体时发生。 Click事件:该事件在用户单击窗体时发生。 DoubleClick事件:该事件在用户双击窗体时发生。 Closed事件:该事件在关闭窗体时发生。,Label 控件,常用属性: Text属性:用来设置或返回标签控件中显示的文本信息。 AutoSize 属性:用来获取或设置一个值,该值指示是否自动调整控件的大小以完整显示其内容。取值为 true时,控件将自动调整到刚好能容纳文本时的大小,取值为false时,控件的大小为设计时的大小。 Font属性:用来设置标签控件中的字体。 ForeColor属性:用来设置前景色,即标签中文字的字体。,TextBox 控件,主要属性 Text属性:Text属性是文本框最重要的属性,因为要显示的文本就包含在Text属性中。 MultiLine 属性:用来设置文本框中的文本是否可以输入多行并以多行显示。值为 true 时,允许多行显示。值为false时不允许多行显示。 ReadOnly属性:用来获取或设置一个值,该值指示文本框中的文本是否为只读。值为 true时为只读,值为 false时可读可写。 PasswordChar 属性:是一个字符串类型,允许设置一个字符,运行程序时,将输入到 Text 的内容全部显示为该属性值,从而起到保密作用,通常用来输入口令或密码。,TextBox 控件,常用事件: GotFocus事件:该事件在文本框接收焦点时发生。 LostFocus事件:该事件在文本框失去焦点时发生。 TextChanged事件:该事件在Text属性值更改时发生。无论是通过编程修改还是用户交互更改文本框的 Text属性值,均会引发此事件。,RadioButton控件,常用属性 Checked属性:用来设置或返回单选按钮是否被选中,选中时值为true,没有选中时值为false。 Text属性:用来设置或返回单选按钮控件内显示的文本 Appearance 属性:用来获取或设置单选按钮控件的外观。当其取值为 Appearance.Button 时,将使单选按钮的外观像命令按钮一样:当选定它时,它看似已被按下。当取值为 Appearance.Normal 时,就是默认的单选按钮的外观。,RadioButton控件,常用事件 Click事件:当单击单选按钮时,将把单选按钮的Checked属性值设置为true,同时发生Click事件。 CheckedChanged事件:当Checked属性值更改时,将触发CheckedChanged事件。,CheckBox 控件,常用属性 Checked属性:用来设置或返回复选框是否被选中,值为true时,表示复选框被选中,值为false时,表示复选框没被选中。,ListBox 控件,常用属性: Items属性: 用于存放列表框中的列表项,是一个集合。通过该属性,可以添加列表项、移除列表项和获得列表项的数目。 SelectedIndex属性:用来获取或设置ListBox控件中当前选定项的从零开始的索引。如果未选定任何项,则返回值为-1。 SelectedItem属性:获取或设置ListBox中的当前选定项。 ItemsCount属性:该属性用来返回列表项的数目。,ListBox 控件,常用方法 SetSelected方法:用来选中某一项或取消对某一项的选择。 格式: ListBox对象.SetSelected(n,l); 功能:如果参数 l 的值是 true,则在 ListBox 对象指定的列表框中选中索引为 n 的列表项,如果参数l 的值是 false,则索引为n 的列表项未被选中。,ListBox 控件,常用方法 Items.Add方法:用来向列表框中增添一个列表项。 格式: ListBox对象.Items.Add(s); 功能:把参数s添加到“listBox对象”指定的列表框的列表项中。 Items.Remove方法:用来从列表框中删除一个列表项,调用格式及功能如下。 格式: ListBox对象.Items.Remove(s); 功能:从 ListBox对象指定的列表框中删除列表项s。,ComboBox 控件,ComboBox控件是列表框和文本框的组合,因此成为组合框。 ComboBox控件支持列表框和文本框的属性和方法。另外还有特有的属性和方法。,Visual studio 中创建c#项目,应用程序总入口,改变button的属性,如果想改变 button的text属性,有两种方法: 设计时设置 text属性,在form_load事件处理程序中,改变button的属性,这种方法是在运行的时候改变属性值,因此在设计阶段看不到变化。,运行,Vs中操作数据库,1. 增加命名空间,2. 创建连接对象,单向操作 Command对象的execute方法 DataAdapter对象的command方法 双向操作 DataReader DataAdapter 和DataSet,2. 操作数据库中的数据,单向操作:删除学号为001的学生信息,双向操作:查询学生总数,关闭窗体时关闭数据库连接,ADO.NET 数据访问技术,ADO.NET编程模型用于对关系或非关系型数据源的操作。 ADO(ActiveX Data Object),是一个用于存取数据源的COM组件 。 ADO.NET在很多方面和ADO比较相近 。 ADO.NET的特征: 非连接数据体系 在数据集中缓存数据 用XML进行数据传送 通过数据命令和数据库相互作用,ADO.NET中的命名空间,System.Data(这个空间必须要引入) System.Data.OLEDB System.Data.SQLClient System.Data.OracleClient System.Data.Sql System.Data.SqlTypes Microsoft.SqlServer.Server System.Transactions,ADO.NET结构模型,ADO.NET包括两个核心组件:DataSet和数据提供程序,用于实现数据操作和数据访问的分离。,ADO.NET 对数据库的访问,对于Insert,Update,Delete 等单向操作,应用程序,数据库,1、用Connection.Open打开数据库,2、用DataAdaptor.Command或者 Command.Execute 执行命令,3、关闭数据库,ADO.NET 对数据库的访问,应用程序,数据库,关闭数据库,1、创建连接用Connection .Open建立连接,2、用DataAdaptor.SelectCommand 执行命令,DataAdaptor.Fill,对于Select的双向操作,DataSet,.NET 数据提供程序,客户端,服务器,数据集,2、将数据发送到数据集,A、客户端修改数据集,3、数据集传递给客户端,B、将修改后的数据集传递给服务器,1、客户端从服务器请求数据,1,2,3是从服务器检索数据的过程 A、B是对数据库修改的过程,.NET 数据提供程序,用于 SQL Server 的 .NET Framework 数据提供程序,System.Data.SqlClient 命名空间,ADO.NET的核心对象,ADO.NET有以下几个核心组件: Connection Command DataReader DataAdapter DataSet,Connection 对象,方法,Close(),Open(),属性,ConnectionString,Connectionstring:属性指定要与哪个数据库进行相连,数据库名是什么?用户名和密码是什么?,Connection,连接字符串示例: 创建Connection对象 打开和关闭连接 :,Data Source=localhost;Initial Catalog=school;Integrated Security=SSPI;,Windows集成验证,Data Source=jnuphysql2005; Initial Catalog= school; user id=sa; password=jnu;,SQL Server身份验证,String connString = _ “Data Source=jnuphysql2005;Initial Catalog= school;user id=sa; password=jnu“; SqlConnection conn = new SqlConnection(); conn.ConnectionString = connString;,SqlConnection conn = new SqlConnection(“Data Source=jnuphysql2005;” + “Initial Catalog= school; user id=sa; password=jnu“),conn.Open() 打开连接 conn.Close() 关闭连接,Command 对象,数据库,Command 对象指定要对数据库执行的操作,检索和操纵数据,Command,Command 对象(1),用SQL 语句的Command设置 SqlCommand objComm = New SqlCommand(); objComm.CommandText=“SQL 语句“; objComm.CommandType=CommandType.Text ; objComm. Connection=conn; 用存储过程的Command设置 SqlCommand objComm = New SqlCommand(); objComm.CommandText=“存储过程名称”; objComm.CommandType=CommandType. StoredProcedure; objComm. Connection=conn;,Conn为已经打开的SqlConnection,Command对象提供了3种执行方法: ExecuteReader() 用于执行SELECT命令,并返回一个DataReader对象。 ExecuteNonQuery() 用于执行非SELECT的命令,如INSERT、DELETE或者UPDATE命令,返回命令所影响的数据行数。也可以用ExecuteNonQuery()方法来执行一些数据定义命令,如新建、更新、删除数据库对象(如表、索引等)。 ExecuteScalar() 用于执行SELECT查询命令,返回数据中第一行第一列的值。常用于执行带有COUNT()或者SUM()函数的SELECT命令。,使用Command(2),DataReader,DataReader对象用来读取数据。 DataReader的常用方法 : 创建DataReader对象:,/通常使用Command类的ExecuteReader()方法 /来创建一个DataReader对象 SqlDataReader reader = cmd.ExecuteReader();,DataReader的使用,用read()方法遍历所有记录 While Reader.Read() /Do something with the current record 访问字段的值 Reader“Pwd“ /通过列名 Reader0 /通过列的索引,索引从0开始 关闭reader对象,关闭数据库连接 Reader.Close(); Conn.Close();,DataReader对象,功能:提供一种只读的、向前的数据访问方法。 使用DataReader对象的常用步骤: 1、创建数据库连接: SqlConnection conn = new SqlConnection(); string connstr = “Data Source=jnuphysql2005;” + “ Initial Catalog= school; user id=sa; password=jnu;“; conn.ConnectionString = connstr; 2、打开连接: conn.Open(); 3、使用Reader对象执行SQL语句: SqlCommand cmd = new SqlCommand(); cmd.CommandType = CommandType.Text; cmd.CommandText = “select * from sc“; cmd.Connection = conn; SqlDataReader reader = cmd.ExecuteReader();,Command 和DataReader 练习,例:在文本框中输入课程号,通过数据库的访问,给出该课程的平均分和最高分,最低分。,方法一:SQL语句中用聚合函数求出最大最小和平均分数,private void button3_Click(object sender, EventArgs e) SqlCommand objComm; SqlDataReader sqlDR; objComm = new SqlCommand(); objComm.Connection = conn; objComm.CommandType = CommandType.Text; objComm.CommandText = “select max(degree),min(degree),avg(degree)“ + ” from SC where cno=“+textBox1.Text+“; sqlDR =objComm.ExecuteReader(); if (sqlDR.Read() textBox2.Text = sqlDR0.ToString(); textBox3.Text = sqlDR1.ToString(); textBox4.Text = sqlDR2.ToString(); sqlDR.Close(); ,如输入错误课程号,给出提示,if (sqlDR.Read() if (sqlDR0 = System.DBNull.Value) label5.Text = “无此课程号“; textBox2.Text = “; textBox3.Text = “; textBox4.Text = “; else label5.Text = “; textBox2.Text = sqlDR0.ToString(); textBox3.Text = sqlDR1.ToString(); textBox4.Text = sqlDR2.ToString(); ,方法2:找出将此课程号的选课记录,用程序进行统计,private void button3_Click(object sender, EventArgs e) SqlCommand objComm; SqlDataReader sqlDR; int maxval, minval,curval; float avgval; int i = 0; objComm = new SqlCommand(); objComm.Connection = conn; objComm.CommandType = CommandType.Text; objComm.CommandText = “select degree from SC where cno=“+ textBox1.Text+“; sqlDR =objComm.ExecuteReader();,minval=100; maxval=0; avgval=0; while (sqlDR.Read() i+; curval = (int)sqlDR0; if(minvalcurval) minval=curval; if (maxval curval) maxval = curval; avgval = avgval + curval; avgval = avgval / i;,if (i=0) label5.Text = “无此课程号“; textBox2.Text = “; textBox3.Text = “; textBox4.Text = “; else label5.Text = “; textBox2.Text =maxval.ToString(); textBox3.Text = minval.ToString(); textBox4.Text = avgval.ToString(); sqlDR.Close(); ,用Command对象实现带参数查询,SqlCommand cmd = new SqlCommand(); cmd.CommandType = CommandType.Text; cmd.CommandText = “select * from student where studentno=sno“; cmd.Connection = conn; cmd.Parameters.Add(“sno“,SqlDbType.NChar,10) ; cmd.Parameters“sno“.Value = “8888“; SqlDataReader reader = cmd.ExecuteReader(); if (reader.Read() textBox1.Text = reader“studentname“.ToString();,用带参数的command对象实现某课程最高、最低和平均分查询,使用Command对象执行存储过程,Use school Go If exists(select name from sysobjects where name=p_stu1 and type=p) drop procedure p_stu1 Go Create procedure p_stu1 sno char(10) AS SELECT * FROM STUDENT Where sno=sno GO,调用p_stu1查询学生的信息,SqlCommand cmd = new SqlCommand(); cmd.CommandType = CommandType.StoredProcedure; cmd.CommandText = “p_stu1“; cmd.Connection = conn; cmd.Parameters.Add(“sno“, SqlDbType.NChar, 10); cmd.Parameters“sno“.Value = textBox1.Text; SqlDataReader reader = cmd.ExecuteReader(); if (reader.Read() textBox2.Text = reader“studentname“.ToString(); textBox3.Text = reader“sex“.ToString(); textBox4.Text = reader“nation“.ToString(); else textBox1.Text = “查无此人,请重新输入“; textBox2.Text = “; textBox3.Text = “; textBox4.Text = “; reader.Close();,用command执行带输出参数的存储过程,create procedure p_stu sno char(10)=0508, avedgr float output AS SELECT avedgr=avg(degree) from sc where studentno=sno,SqlCommand cmd = new SqlCommand(); cmd.CommandType = CommandType.StoredProcedure; cmd.CommandText = “p_stu“; cmd.Connection = conn; cmd.Parameters.Add(“sno“, SqlDbType.NChar, 10); cmd.Parameters“sno“.Value = textBox1.Text; cmd.Parameters.Add(“avedgr“, SqlDbType.Float); cmd.Parameters“avedgr“.Direction = ParameterDirection.Output; cmd.ExecuteNonQuery(); textBox2.Text = cmd.Parameters“avedgr“.Value.ToString();,try-catch-finally 捕捉异常,在 try 块中获取并使用资源,在 catch 块中处理异常情况,并在 finally 块中释放资源。 try cmd.Connection = conn; cmd.Parameters.Add(“sno“, SqlDbType.NChar, 10); cmd.Parameters“sno“.Value = “8888“; SqlDataReader reader = cmd.ExecuteReader(); reader.Close(); catch (Exception ex) MessageBox.Show(ex.Message); finally conn.Close(); ,练习:使用ListBox查询学生选课情况,SqlCommand objComm; SqlDataReader sqlDR; objComm = new SqlCommand(); objComm.Connection = conn; objComm.CommandType = CommandType.Text; objComm.CommandText = “select cname from SC,course,student “ + “where o=o and student.sno=sc.sno and “+ “student.sno=“+textBox1.Text+“; try sqlDR = objComm.ExecuteReader(); listBox1.Items.Clear(); while (sqlDR.Read() listBox1.Items.Add(sqlDR“cname“.ToString(); sqlDR.Close(); catch (Exception ex) MessageBox.Show(ex.Message); ,DataSet和DataAdapter(1),DataSet对象与ADO Recordset对象相似,但功能更为强大,并具有另一个重要区别:DataSet是离线的。DataSet表示数据的缓存,具有类似数据库的结构,如表、列、关系、约束等。 尽管DataSet可以像数据库那样运行,但重要的是:DataSet对象不直接与数据源进行交互。这样有利于开发人员能够使用始终一致的编程模型,来自数据库、XML文件或用户输入的数据都可添加到DataSet对象中。,DataSet和DataAdapter(2),DataAdapter是连接到数据库以填充DataSet的对象。它还可以根据DataSet的数据来更新数据库的数据。 DataAdapter起到一个桥梁作用,在DataSet和数据源存储区之间进行数据检索和保存。 SqlDataAdapter da=new SqlDataAdapter();,DataSet(1),大批量的查询、修改数据怎么办? 想在断开数据库连接的情况下操所数据怎么办?,应用程序 大量的数据 来自多个数据源,使用 DataSet 对象,DataSet,数 据 库,DataSet(2),DataSet 数据集 简单理解为一个临时数据库 将数据源的数据保存在内存中 独立于任何数据库,数据源,DataSet,应用程序,驻留于内存, 临时存储数据,DataSet结构,DataSet 的基本结构,DataSet,DataTable,DataColumn,DataRow,数据集,数据表的集合,数据表,数据列的集合,数据行的集合,数据列,数据行,DataSet工作原理,数据集,发送数据,修改数据集,传递数据,提交修改后的数据,请求数据,客户端,创建DataSet基本步骤,创建一个 DataSet 可以指定一个数据集的名称 如果不指定名称,则默认被设为“NewDataSet“,DataSet dataSet = new DataSet();,DataSet ds1 = new DataSet(“school“);,DataSet 数据集对象 = new DataSet(“数据集的名称字符串“);,可选的,DataTable对象,ADO.NET可以在与数据库断开连接的方式下通过DataSet或DataTable对象进行数据处理,当需要更新数据时才重新与数据源进行连接,并更新数据源。 可以直接将数据从数据库填充到DataTable对象中,也可以引用DataSet对象中的DataTable对象。 与关系数据库中的表结构类似,DataTable对象也包括行、列以及约束等属性。一个表中可以包含多个DataColumn对象,每一个DataColumn对象表示一列;除此之外,每个表中也可以包含多行,每一行都是一个DataRow对象。,DataAdapter对象,DataSet并不关心数据的来源,它没有包含任何用于访问关系型数据库的功能。 DataAdapter负责将DataSet与关系型数据库联系起来,还能够将DataSet的改变反应在数据库中。 DataAdapter对象主要是在Connetcion对象和DataSet对象之间执行数据传输的工作。它是架构在Command对象之上的一个对象。,DataAdapter 对象的属性和方法,DataAdapter常用的属性和方法 :,创建DataAdapter对象(1),DataAdapter对象有几种创建方法: 假设已经有: String strconn=“”; /连接串 String strsql=“select * from student”; SqlConnection conn=new SqlConnection(Constr); SqlCommand cmd=new SqlCommand(“select * from student”, conn); 则有3种方法创建DataAdapter对象:,方法1:用SQL串和连接串 SqlDataAdapter da1= new SqlDataAdapter(strsql, strconn); 缺点:每创建一个SqlDataAdapter对象,都会创建一个连接对象。 方法2: 用SQL串和连接对象 SqlDataAdapter da1= new SqlDataAdapter(strsql, conn);,创建DataAdapter对象(2),方法2:用command对象和连接对象 SqlDataAdapter da1= new SqlDataAdapter(cmd, conn); 其中第二种方法比较常用,创建DataAdapter对象(3),用DataAdapter填充DataSet,创建数据集对象 : 填充数据集: 访问数据集中的表:,DataSet ds = new DataSet();,adapter.Fill(ds); adapter.Fill(ds, “stu“); /将数据填充到数据集中,并给表起一个标识名“stu“ 说明:当填充的DataSet中的表不存在时,会创建一个新表并添加到Tables 集合中,否则每使用一次Fill方法,会在原来的结果集中追加新行。,ds.Tables0 数据集中的第一张表 ds.Tables“stu“ 数据集中的标识名为“stu“的表,用DataSet访问数据,DataSet对象不同于ADO的RecordSet对象,DataSet不支持当前记录的概念,因此不支持当前记录的特定属性,也没有从一个记录移动到另一个记录的方法和属性。 DataSet可以像处理任何集合那样处理行集合,通过集合的索引访问行。,从DataSet中提取表和数据行,DataTable表示数据集中的表,它是DataSet中常用的对象,与数据库中的表的概念十分相似。 DataRow表示是表中的数据行:,/提取表第一行 DataRow row0 = dt.Rows0; /将表的第一行第一列显示在textbox1中; textbox1.text=dt.Rows00; /或者 textbox1.text=row00;,/提取一个表 DataTable dt = ds.tables“stu“;,遍历表中所有行,用count属性得到行数,然后通过循环遍历所有行。 用foreach循环,DataRow row; foreach(row in ds.tables“stu“.Rows) MessageBox.Show(row1.ToString();,int i; /提取一个表 int totline= ds.tables“stu“.Rows.Count; for(i=0;itotline;i+) MessageBox.Show(ds.Tables“stu“.Rowsi1.ToString();,将DataSet更新保存到数据库,在修改了DataSet中的数据后,可能需要将更新后的数据发回数据库。为了向数据库发送修改的数据,可调用 DataAdapter的 Update 方法。 da.Update(ds.tables“stu”); Update 方法将从指定的 DataSet 的DataTable中每个已插入、已更新或已删除的行调用相应的 INSERT、UPDATE 或 DELETE 语句。 返回值为成功更新的行数。,DataAdapter的Update方法内部机制,行状态,DataTable中的每一行的状态由DataRow对象的RowState属性来表示,RowState 有 Added, Modified, Unchanged, Deleted, Detached 几种, 分别表示 DataRow 被添加, 修改, 无变化, 删除, 从表中脱离. 在调用一些方法或者进行某些操作之后, 这些状态可以相互转化. 如果使用了Add方法添加到某个行集合后,行状态为Added, 当用Delete方法将该行从一个行集合中移除后,行状态修改为Detached.,Update方法(1),DataAdapter类有4个Command对象属性,分别为SelectCommand, InsertCommand, UpdateCommand, DeleteComm

温馨提示

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

评论

0/150

提交评论