命名空间System.Data.Oledb的是.NET Framework Data Provider for OLE DB。可用来存取OLE DB数据源。使用OleDbDataAdapter,配合内存的DataSet,可以查询及更新数据源。ADO.NET的DataRaeder对象能读取数据库记录;DataAdarter能从数据源提取数据,并填入DataSet的数据表。
如果要用C#程序代码来编写,要如何着手呢?
1.导入相关的命名空间
要链接数据库,第一个要确认数据库类型。.NET Framework Data Provider的用途是来连接数据库,执行命令和提取结果。共有四个:
(1).NET Framework Data Provider for SQL Server:适用于Microsoft Sql Server 7.0 以后的版本,使用System.Data.SqlClient命名空间。
(2).NET Framework Data Provider for OLE DB :适用于Access数据库,使用System.Data.OleDb命名空间。System.Data.OleDb命名空间的常用类如表所示:
OleDbCommand | 针对数据源执行的SQL语句或存储过程 |
---|---|
OleDbConnection | 建立数据源的链接 |
OleDbDataAdpter | 数据命令级和数据库连接,用来填入DataSet并更新数据源 |
---|---|
OleDbDataReader | 提供数据源读取数据行的方法 |
(3).NET Framework Data Provider for ODBC :适用于ODBC数据源的中介应用程序,使用System.Data.Odbc命名空间
(4).NET Framework Data Provider for Oracle:适用于Oracle数据库,支持Oracle客户端软件8.1.1(含)以后版本,使用Syatem.Data.OracleClient命名空间。
创建项目后,若是连接Access数据库,则必须导入”System.Data.OleDb"命名空间
using Syatem.Data.OleDb;
2.用Connection对象连接数据库
不同数据库需要不同的Connection对象,Access数据库使用OLE DB 所以要用.NET Framework数据提供程序 的OleDbConnection对象来创建连接,其构造方法如下:
public OleDbConnection(string connectionString);
connectionString:用来打开数据库的连接
所以要用OleDbConnection类来创建对象并指定链接的字符串。
//创建OleDbConnection对象conn,并指定连接字符串
OleDbConnection conn;
conn = new OleDbConnection(connString);
connSrting 为指定数据源的连接字符串,以Access数据库而言,会有以下两种概况:
connString = "Provider=Microsoft.Jet.OLEDB.4.0 ;" + "Data Source=C:\bin\LocalAccess40.mdb"; //旧版Access
connString = "Provider=Microsoft.Ace.OLEDB.12.0 ;" + "Data Source=D:\VBDemo\CH17\Loan.accdb"; //新版Access
DataSource属性:数据源,用来指出Access数据库的文件路径。
不同的数据源属性,须以”;“(分号)字符分隔开
完成Connection对象的创建后,用Open方法来打开数据库
conn.Open();
OleDbConnection类的常用成员
ConnectionTimeOut | 产生错误前尝试终止连接的等待时间 |
---|---|
Database | 获取或设置要链接的数据库名称 |
DataSource | 获取或设置要连接的数据源名称 |
– | – |
Provider | 获取连接字符串“Provider =”子句指定的OLE DB提供者名称 |
Close() | 关闭OLE DB数据库的连接 |
– | – |
Dispose() | 释放OleDbConnection所占用的资源 |
Open() | 打开OLE DB数据库的连接 |
– | – |
3.创建Command对象,执行SQL语句
Command对象能用来执行相关的SQL语句。Command对象主要是通过两个方式来执行SQL语句:ExecuteReader方法要搭配DataReader使用,将SQL语句查询所得结果以DataReader来提取;ExecuteNonQuery方法不返回数据记录,但可以返回变动的数据笔数,例如使用INSERT或UPDATE语句等。用OleDbCommand类来创建Command对象,要先了解其构造函数:
OleDbCommand(String)
OleDbCommand(String,OleDbConnection)
OleDbConnection(String,OleDbConnection,OleDbTransaction)
Strng:为SQL语句
OleDbConnection:数据库的连接对象
OleDbTransaction:执行的数据库操作
例如:要用OleDbCommand对象去获取”Reader"数据表的所有内容。
OleDbCommand cmd ; //创建OleDbCommand对象cmd
//SQL语句:获取Reader数据表的所有记录
sqlShow ="SELECT * FROM Reader";
//OleDbConnection对象
cmd = new OleDbCommand(sqlShow,conn);
OleDbCommand类的成员
CommandText | 获取或设置数据源的SQL语句或存储过程 |
---|---|
CommandTimeout | 获取或设置错误产生前的等待时间 |
CommandType | 获取或设置CommandText属性的解译方法 |
---|---|
Connetion | 获取或设置OleDbCommand所使用的OleDbConnecton |
Parameters | 获取OleDbParameterCollection |
---|---|
Transaction | 获取或设置OleDbTransactoin,执行其中的OleDbCommand |
Cancle() | 用来尝试取消OleDbCommand的执行 |
---|
产生Command对象,用DataReader对象调用“Command.ExecuteReader“提取数据源的记录,然后由Datader对象显示查询的结果。
OleDbDataReader rdDisplay;
rdDisplay = cmd.ExecuteReader;
Execute()方法
ExecuteReader | 返回DataReader对象 |
---|---|
ExecuteScalar | 从数据表获取单一字段数据,通常是第一笔记录第一个字段 |
ExecuteNonQuery | 执行SQL语句,但不会返回任何记录 |
– | – |
4.用DataReader对象获取查询结构**
用SQL语句执行查询时,会将结果一直存储在客户端的网络缓冲区,直到使用DataReader的Read()方法读取他们为止。由于可以立即提取可用的数据,而一次只将一个数据行存储到内存中,因此DataReader可以提高应用程序的性能,减少系统的负荷。DataReader对象用来读取数据源的数据流。
如何读取DataReader对象的内容?可通过while循环或 Do while配合DataReader提供的read()方法,一次读取一个记录。先以for循环获取要读取数据表的栏数(即字段数),将数据输出。
范例 以连接字符串读取数据表内容
创建Windows窗体,项目名称为 ”CH1505a"。加入控件Button,其属性Name设置为“btnAccess",Text设置为“打开Access数据库”TextBox的属性Name设置为“txtDbShow"
用鼠标双击”打开Access数据库”按钮,进入程序代码编辑区(Form1.cs)编写以下程序代码
private void btnAcccess_Click(object sender,EventArgs)
{
//步骤2——创建连接Access数据库的相关对象
OleDbConneection conn;/数据库的连接对象
OleDbCommand cmd;//执行SQL语句的Command对象
OleDbDataReader rdDisplay;
string connStrong,sqlText;
//创建链接字符串
connString = "Provider=Microsot.ACE.OLEDB.12.0;" + @"Data Source = F:\Visual C# 2013 Demo\Easy\CH15.accdb";(这里是我数据库的存放路径)
conn.Open(); //打开数据库
//步骤3——以Commmand对象cmd执行SQL语句,读取所有字段
sqlText = "SELECT * FROM 系所";
//获取SQL语句
cmd= new OleDbCommand(sqlText,conn);
//步骤四——将查询结果用DataReqader来显示
rdDisplay=cmd.ExecuteReader();
string result = "";
//以for循环先读取字段名,暂时存放在result变量中
for(int ct=0;ct<rdDissplay.FiledCount;ct++)
{
result+=rdDisplay.GetName(ct) + "\t";
}
result+=Eniveronment.NewLine;
result+="------------------------------------------------------------\n";
result+=Eniveronment.NewLine;
//读取每一笔记录
while(rdDisplay.Read())
{
for(int ct = 0;ct<rdDisplay.FieldCount;ct++)
{
result+=
rdDisplay[ct].ToString() + "\t";
}
result +=Eniveronment.NewLine;
}
rdDisplay.Close();//关闭数据表的读取
conn.Close();//关闭数据库
txtDbShow.Text=result;
}
5.DataAdapter载入数据
DataAdapter对象扮演“数据配送器”的角色,是数据源与DataSet之间的中介,将SQL命令的运行结果填入DataSet并梗新数据源。
如何使用DataAdapter,程序如下:
先创建Cinnection对象来连接并打开数据库
再用DataAdapter对象执行SQL语句,将所得数据存入DataSet.例如,创建对象dsShow,通过OleDbDataAdapter构造函数传入参数sqlText(SQL语句)和conn对象。
OleDbDataAdapter dsShow;
dsShow = new OleDbDataAdapter(sqlText,conn);
指定数据绑定的对象,用Fill方法加载DataSet对象,并指定控件的“DataSource"属性,显示数据内容。
DataSet ds = new DataSet();
dsShow.Fill(ds,"Reader") //将Reader数据表载入
dgvReader.DataSource = ds.Tables["Reader"].DefaultView