第九章-使用C#和ADONET操作数据库.ppt
《第九章-使用C#和ADONET操作数据库.ppt》由会员分享,可在线阅读,更多相关《第九章-使用C#和ADONET操作数据库.ppt(46页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、数据库原理及应用1 页第第9 9章章:使用使用C#C#和和ADO.NETADO.NET操作数据库操作数据库 本章要点数据提供程序的选择vSqlConnection的使用vOleDbConnection的使用vOdbcConnection的使用vOracleConnection的使用数据的获取vCommand的使用vDataReader的使用vDataSet和DataAdapter的使用1/23/2023数据库原理及应用2 页nConnectionString类似于OLEDB连接字符串,但并不相同。可以使用ConnectionString属性连接到数据库(P198)。Persist Securi
2、ty Info=False;Integrated Security=SSPI;database=northwind;server=mySQLServern下面的例子创建一个SqlConnection对象并设置它的一些属性。public void CreateSqlConnection()SqlConnection myConnection=new SqlConnection();myConnection.ConnectionString=Persist Security Info=False;”+“Integrated Security=SSPI;database=northwind;”+“s
3、erver=mySQLServer;Connect Timeout=30;myConnection.Open();SqlConnectionSqlConnection的使用的使用1/23/2023数据库原理及应用3 页n例子:执行一条插入语句l创建一个OleDbConnection和一个OleDbCommand对象。lOleDbConnection被设置为OleDbCommand的Connection,并被打开。l调用ExecuteNonQuery并关闭该连接。为了完成此任务,将向ExecuteNonQuery传递一个连接字符串和一个查询字符串(一个SQLINSERT语句)。OleDbConn
4、ectionOleDbConnection的使用的使用1/23/2023数据库原理及应用4 页public void InsertRow(string myConnectionString)/If the connection string is null,use a default.if(myConnectionString=)myConnectionString=Provider=SQLOLEDB;Data Source=localhost;Initial Catalog=Northwind;+Integrated Security=SSPI;OleDbConnection myConne
5、ction=new OleDbConnection(myConnectionString);string myInsertQuery=INSERT INTO Customers (CustomerID,CompanyName)Values(NWIND,Northwind Traders);OleDbCommand myCommand=new OleDbCommand(myInsertQuery);myCommand.Connection=myConnection;myConnection.Open();myCommand.ExecuteNonQuery();myCommand.Connecti
6、on.Close();OleDbConnectionOleDbConnection的使用(的使用(Cont.Cont.)1/23/2023数据库原理及应用5 页OdbcConnectionOdbcConnection的使用的使用n例子:执行一条插入语句l创建一个OdbcConnection和一个OdbcCommand对象。lOdbcConnection被设置为OdbcCommand的Connection,并被打开。l调用ExecuteNonQuery并关闭该连接。为了完成此任务,将向ExecuteNonQuery传递一个连接字符串和一个查询字符串(一个SQLINSERT语句)。1/23/202
7、3数据库原理及应用6 页public void InsertRow(string myConnection)/If the connection string is null,use a default.if(myConnectionString=)myConnection=DRIVER=SQL Server;SERVER=MyServer;Trusted_connection=yes;DATABASE=northwind;OdbcConnection myConn=new OdbcConnection(myConnectionString);string myInsertQuery=INSE
8、RT INTO Customers (CustomerID,CompanyName)Values(NWIND,Northwind Traders);OdbcCommand myOdbcCommand=new OdbcCommand(myInsertQuery);myOdbcCommand.Connection=myConn;myConn.Open();myOdbcCommand.ExecuteNonQuery();myOdbcCommand.Connection.Close();OdbcConnectionOdbcConnection的使用的使用(Cont.)(Cont.)1/23/2023数
9、据库原理及应用7 页OracleConnectionOracleConnection的使用的使用nMicrosoft.NET Framework Data Provider for Oracle(以下简称为.NET for Oracle)是一个.NET Framework的组件。n 这个组件为使用.NET访问Oracle数据库提供了支持。n 使用.NET和Oracle的开发人员,不必继续使用那个并不十分“专业”的OLE DB来访问Oracle数据库。n 该组件的设计非常类似.NET中内置的Microsoft.NET Framework Data Provider for SQL Server和
10、OLE DB。1/23/2023数据库原理及应用8 页nCommand对象是对数据存储执行命令的对象。n实际上,当从Connection对象中运行一条命令时,已经隐含地创建一个Command对象。但是Connection对象在处理命令的功能上受到一定的限制,而Command对象是特别为处理命令的各方面问题而创建的:l有时其他对象允许向命令传入参数,但在Connection对象中不能指定参数的任何细节。使用Command对象允许指定参数(以及输出参数和命令执行后的返回值)的精确细节(比如,数据类型和长度)。l因此,除了执行命令和得到一系列返回记录,也可能得到一些由命令提供的附加信息。l对于那些不
11、返回任何记录的命令,如插入新数据或更新数据的SQL查询,Command对象也是有用的。数据的获取:创建数据的获取:创建CommandCommand对象对象1/23/2023数据库原理及应用9 页n建立了数据源的连接和设置了命令之后,Command对象执行SQL命令有三种方法:lExecuteNonQuery、ExecuteReader和ExecuteScalar:ExecuteNonQuery执行命令,但不返回任何结果ExecuteReader执行命令,返回一个DataReaderExecuteScalar执行命令,返回一个值lSqlCommand类也提供了下面两个方法:ExecuteResu
12、ltset为将来使用而保留ExecuteXmlReader执行命令,返回一个XmlReader。n用ExecuteNonQuery执行命令不会返回结果集,只会返回语句影响的记录行数。l它适合执行插入、更新、删除之类不返回结果集的命令l如果是SELECT语句,那么返回的结果是-1数据的获取:执行命令数据的获取:执行命令1/23/2023数据库原理及应用10 页下面的程序对 Orders 表执行了更新并做了查询。using System;using System.Data;using System.Data.SqlClient;public class myDataAccess public st
13、atic void Main()SqlConnection conn=new SqlConnection(Server=localhost;Database=Northwind;User ID=sa;PWD=sa);SqlCommand cmd=new SqlCommand(update Orders set OrderDate=2004-9-1 where OrderID=10248,conn);try conn.Open();int i=cmd.ExecuteNonQuery();Console.WriteLine(i.ToString()+rows affected by UPDATE)
14、;cmd.CommandText=select*from Orders;i=cmd.ExecuteNonQuery();Console.WriteLine(i.ToString()+rows affected by SELECT);1/23/2023数据库原理及应用11 页catch(Exception ex)Console.WriteLine(ex.Message);finally conn.Close();n使用ExecuteReader方法执行的命令,可以返回一个DataReader的实例或者IDataReader接口的结果集。通过DataReader对象就能够获得数据的行集合(关于Da
15、taReader的使用将在后面说明)n例子:using System;using System.Data;using System.Data.SqlClient;数据的获取:执行命令(数据的获取:执行命令(Cont.Cont.)1/23/2023数据库原理及应用12 页public class myDataAccess public static void Main()SqlConnection conn=new SqlConnection(Server=localhost;Database=Northwind;Uer ID=sa;PWD=sa);SqlCommand cmd=new SqlC
16、ommand(select top 20*from Orders,conn);SqlDataReader reader;/或者或者IDataReader reader;try conn.Open();reader=cmd.ExecuteReader();while(reader.Read()Console.WriteLine(reader0.ToString();reader.Close();catch(Exception ex)Console.WriteLine(ex.Message);finally conn.Close();数据的获取:执行命令(数据的获取:执行命令(Cont.Cont.
17、)1/23/2023数据库原理及应用13 页图7-3执行结果图编译执行结果如图7-3:1/23/2023数据库原理及应用14 页nExecuteReader方法,如果想获得数据的记录行数,可以通过selectcount(*)这样的语句取得一个聚合的行集合。n对于这样求单个值的语句,Command对象还有更有效率的方法ExecuteScalar。l它能够返回对应于第一行第一列的对象(System.Object),通常使用它来求聚合查询结果。l 注意:如果要把返回结果转化成精确的类型,数据库在查询中就必须强制将返回的结果转换,否则引发异常。n例子:using System;using System
18、.Data;using System.Data.SqlClient;数据的获取:执行命令(数据的获取:执行命令(Cont.Cont.)1/23/2023数据库原理及应用15 页public class myDataAccess public static void Main()SqlConnection conn=new SqlConnection(Server=localhost;Database=Northwind;Uer ID=sa;PWD=sa);SqlCommand cmd=new SqlCommand(select count(*)from Orders,conn);try con
19、n.Open();int i=(int)cmd.ExecuteScalar();Console.WriteLine(record num:+i.ToString();cmd.CommandText=select cast(avg(Freight)as int)from Orders;int avg=(int)cmd.ExecuteScalar();Console.WriteLine(avg:+avg.ToString();cmd.CommandText=select avg(Freight)from Orders;avg=(int)cmd.ExecuteScalar();/引发异常引发异常 C
20、onsole.WriteLine(avg:+avg.ToString();catchfinallyconn.Close();1/23/2023数据库原理及应用16 页n编译执行结果如图7-4下:图7-4执行结果图n这个程序中,最后一个查询将引发异常,因为聚合返回的结果是float类型的,无法转换。n其他命令:lExecuteResultSet(只用于Sql提供者)。这个方法标记为“为将来使用而保留”,如果不小心调用了它,就会抛出一个异常System.NotSupportedException。lExecuteXmlReader(只用于Sql提供者)。顾名思义,这个方法执行命令,给调用者返回一个
21、XmlReader对象。1/23/2023数据库原理及应用17 页n参数化的查询能够对性能有一定的优化,因为带参数的SQL语句只需要被SQL执行引擎分析过一次。nCommand的Parameters能够为参数化查询设置参数值。Parameters是一个实现IDataParamterCollection接口的参数集合。n不同的数据提供程序的Command对参数传递的使用不太一样,其中SqlClient和OracleClient只支持SQL语句中命名参数而不支持问号占位符,必须使用命名参数,而OleDb和Odbc数据提供程序只支持问号占位符,不支持命名参数。数据的获取:参数化查询数据的获取:参数化
22、查询1/23/2023数据库原理及应用18 页n对于查询语句SqlClient必须使用命名参数,类似于下面的写法:SELECT*FROM Customers WHERE CustomerID=CustomerIDOracle的命名参数前面不用,使用(:),写为(:CustomerID)。n对于OleDb或者Odbc必须使用?占位符,类似于下面的写法:SELECT*FROM Customers WHERE CustomerID=?数据的获取:参数化查询数据的获取:参数化查询1/23/2023数据库原理及应用19 页下面以SqlServer为例,说明其使用方法:using System;using
23、 System.Data;using System.Data.SqlClient;public class myDataAccess public static void Main(String args)SqlConnection conn=new SqlConnection(Server=localhost;Database=Northwind;UID=sa;PWD=sa);SqlCommand cmd=new SqlCommand(select*from Orders where OrderID=oid,conn);SqlDataReader reader;try int param=C
24、onvert.ToInt32(args0);cmd.Parameters.Add(oid,param);/使用命名参数使用命名参数 cmd.Parameters0.Direction=ParameterDirection.Input;conn.Open();reader=cmd.ExecuteReader();1/23/2023数据库原理及应用20 页while(reader.Read()Console.WriteLine(reader0.ToString();reader.Close();catch(Exception ex)Console.WriteLine(ex.Message);fin
25、ally conn.Close();对于OleDb或者Odbc数据提供程序的命令参数,只需要把参数按照占位符从左到右的顺序,匹配给Parameters集合就行了。1/23/2023数据库原理及应用21 页using System;using System.Data;using System.Data.OleDb;public class myDataAccess public static void Main(String args)OleDbConnection conn=new OleDbConnection(Provider=SQLOLEDB;Server=locahost;Databa
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第九 使用 C# ADONET 操作 数据库
限制150内