240 likes | 414 Views
第 9 章 用 ADO.NET 访问数据库. (3 hours). 主要内容. ADO.NET 与数据库概述 ADO.NET 类和对象 ADO.NET 基本数据库编程. 9.1 ADO.NET 与数据库概述. ADO.NET 是 .NET 的重要组成部分 , 是数据库程序和数据源沟通的桥梁, 它提供面向对象的数据结构,用来开发应用程序。 ADO.NET 架构希望能够在做处理数据的同时,不要一直和数据库联机,而导致一直占用资源。
E N D
第9章 用ADO.NET访问数据库 (3 hours)
主要内容 • ADO.NET与数据库概述 • ADO.NET类和对象 • ADO.NET基本数据库编程
9.1 ADO.NET与数据库概述 • ADO.NET是.NET 的重要组成部分, • 是数据库程序和数据源沟通的桥梁, 它提供面向对象的数据结构,用来开发应用程序。 • ADO.NET架构希望能够在做处理数据的同时,不要一直和数据库联机,而导致一直占用资源。 ADO.NET将存取数据和数据处理分开,达到离线存取数据的目的,使得数据库能够执行其他操作。因此将ADO.NET分成 数据提供程序和DataSet数据集(数据处理)两个主要部分。
9.2 ADO.NET类和对象概述 • ADO.NET中的类可分为数据提供者对象和用户对象(数据类对象)两种. • 数据提供者对象专用于每一种类型的数据源,完成在数据源中实际的读取和写入工作。 • 用户对象是将数据读入到内存中后用来访问和操作数据的对象。用户对象以非连接方式使用:在数据库关闭后也可以使用内存中的数据。
.NET数据提供者对象 • 常用的. NET数据提供者对象分为以下4种: • SQL Server数据源提供程序 • OLE DB数据源提供程序 • ORACLE数据源提供数据 • 与ODBC兼容的数据源提供程序。 所有的数据提供程序都位于System.Data命名空间中。
.NET数据提供者对象 • Connection对象 • Command对象 • DataReader对象 • DataAdapter对象
用户对象(数据类对象) • 它为数据库中的信息存储一个本地拷贝,从而可以在切断数据库连接时处理这个信息。可以按任何顺序读行,按灵活的方式搜索、排序和过滤这些行,甚至可以改变这些行,然后将所做的改变同步到数据库中,主要包含以下几种对象: • DataSet对象 • DataTable对象 • DataRow对象 • DataColumn对象
9.3 ADO.NET基本数据库编程 • 常用的数据库编程包括连接数据库、插入新的数据、删除数据和修改数据,即执行SQL语法中的Insert、Delete、 Update语句。
连接数据库—见read_access (Do it) • 进行ADO.NET的开发首先需要进行数据库的连接。下面的代码是一个连接字符串样本,用来访问access数据库。 static private string GetConnectionString() { //适应于SQL Server数据库 return @"server=localhost;database=Northwind;uid=sa;pwd=sa"; //适应于Access等数据库 return @"Provider=Microsoft.Jet.OleDb.4.0;Data Source=C:\Student.mdb"; } 其中C:\ Student.mdb为存放Access数据库文件的位置。
read_access 1 c:\windows\system32\msjetoledb40.dll //1 连接数据库的字符串 string strcon = @"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=c:\Student.mdb"; //2 创建Connection对象,并连接到数据库 OleDbConnection myConnection = new OleDbConnection(strcon); //3 创建Command对象 OleDbCommand myCommand =myConnection.CreateCommand(); //4 Command对象的SQL语句 myCommand.CommandText ="select * from Student";
using System.Data;using System.Data.OleDb; //5 用Connection对象的Open()方法打开数据库 myConnection.Open(); //6 用Command对象的ExecuteReader()方法执行select OleDbDataReader myDataReader = myCommand.ExecuteReader(); //7 读一行 for(int i=0; i<10; i++) { myDataReader.Read(); Console.WriteLine(myDataReader["Id"]); Console.WriteLine(myDataReader["Name"]); } //8 关闭 myDataReader.Close(); myConnection.Close();
SQL Server (See it) 1) 在SQL Server中建student数据库,并添加数据。 2)C# code: static void LoadDB_student() { string strcon = @"server=localhost; database= student; uid=sa; pwd=123"; SqlConnection mySqlConnection = new SqlConnection(strcon); SqlCommand mySqlCommand = mySqlConnection.CreateCommand(); string commandString = "select * from Customers where sno=1"; mySqlCommand.CommandText = commandString; mySqlConnection.Open(); SqlDataReader mySqlDataReader = mySqlCommand.ExecuteReader();
SQL Server 2 mySqlDataReader.Read(); Console.WriteLine(mySqlDataReader[“sno"]); Console.WriteLine(mySqlDataReader[“sname"]); // 关闭数据库连接 mySqlDataReader.Close(); mySqlConnection.Close();
插入新的数据记录 使用Command对象的ExecuteNonQuery()方法来实现插入数据操作,用SQL的Insert语句来设定具体的要插入的新记录内容。 //1 连接数据库的字符串 String connectionString = @"server=localhost;database=student;uid=sa;pwd=sa"; //2 创建SqlConnection对象,并连接到数据库 SqlConnection mySqlConnection = new SqlConnection(connectionString); //3 创建SqlCommand对象 SqlCommand mySqlCommand = mySqlConnection.CreateCommand(); //4 创建SQL的Insert语句,在Student表中输入一条新的记录 string InsertString = "INSERT INTO Student(SName,Sex) VALUES('王二','男')"; mySqlCommand.CommandText = InsertString; //5 用Connection对象的Open()方法打开数据库 mySqlConnection.Open(); //6 用SqlCommand对象,插入一条新的记录 mySqlCommand.ExecuteNonQuery();
9.4 ADO.NET与XML • 可扩展标记语言(Extensible Markup Language,XML)在Internet中的地位已经确立,与XML的研究和应用正在兴起并在Internet时代背景下迅速发展。XML支持是ADO.NET的一个主要设计目标,它对于ADO.NET内部实现是非常重要的,本节主要介绍这两者的关联。
了解ADO.NET和XML • .NET框架提供了操作XML文档和数据的一组完整的类。XmlReader和XmlWriter对象以及这两个对象的派生类提供了读取XML和可选验证XML的能力。 • XmlDocument和XMLSchema对象及其相关类代表了XML本身,而XslTransform类和XPathNavigator类分别支持XSL转换(XSLT)和应用XML路径语言(XPath)查询。 • 除了提供操作XML数据的能力之外,XML标准还是.NET框架中数据转换和序列化的基础。多数时候这些都在后台进行,不过我们已经看到ADO.NET类型化数据集是使用XML架构表示的。 • 另外,ADO.NET数据集类对读写XML数据和架构提供直接支持,而且XmlDataDcoument提供同步XML数据和关系ADO.NET数据集的能力,这样就可以用XML和关系工具对数据的单个集合进行操作。
DataSet对象对XML支持 • 在ADO.NET中对XML支持的主要是DataSet对象,DataSet具有WriteXml()方法,它将数据集的内容以XML文档的形式写出。 • ReadXml()方法也可以用于将XML文件的内容读入DataSet中。
从数据库中读取数据写到xml文件中 • class WriteXMLExample • { static void Main(string[] args) • { • string connectionString = @"server=localhost;database=Northwind;uid=sa;pwd=sa"; • SqlConnection mySqlConnection = new SqlConnection(connectionString); • //新建一个DataSet对象 • DataSet myDataSet = new DataSet(); • mySqlConnection.Open(); • string SQLString = "Select * from Shippers"; • //新建一个SqlDataAdapter对象,并执行了一个查询语句 • SqlDataAdapter mySqlDataAdapter = new SqlDataAdapter(SQLString, mySqlConnection); • //使用Fill方法把所有的数据放在myDataSet • mySqlDataAdapter.Fill(myDataSet); • //设置xml文件的路径为,当前程序所在的路径,xml文件名称为Shippers • string pathXML = System.Environment.CurrentDirectory + "\\Shippers.xml" ; • //调用WriteXML方法把查询结果放到Shippers.xml的XML文档中 • myDataSet.WriteXml(pathXML); • mySqlConnection.Close(); • } • }
读取XML数据 • 使用DataSet的ReadXML()方法可以读出XML文档中的所有数据。本程序需将上一个程序生成的Shippers.xml复制到C盘根目录下。
程序代码 class ReadXMLExample { static void Main(string[] args) { string ShipperID , CompanyName, Phone; //新建一个DataSet对象 DataSet myDataSet = new DataSet(); //读取C盘根目录下的Shippers.xml文件,把文件内容填充到DataSet对象中 myDataSet.ReadXml("C:\\Shippers.xml"); //显示myDataSet对象中的数据 for(int i=0;i<myDataSet.Tables[0].Rows.Count;i++) { ShipperID = myDataSet.Tables[0].Rows[i]["ShipperID"].ToString(); CompanyName = myDataSet.Tables[0].Rows[i]["CompanyName"].ToString(); Phone =myDataSet.Tables[0].Rows[i]["Phone"].ToString(); Console.WriteLine("ShipperID = {0}, CompanyName = {1}, Phone = {2}", ShipperID, CompanyName, Phone); } } }
作业 1)用ADO.NET读jzd.dbf数据库文件。 2)用文件方式读jzd.shp文件。 3)设计界面显示jzd.dbf, jzd.shp中的内容。