OleDbConnection对象属性
ConnectionString属性
String类型.唯一的非只读属性.控制对象连接数据源的方式.
连接到数据源之后,属性只读.
ConnectionTimeOut
Int32类型.以秒为单位,在计时结束之前尝试连接数据库.
Jet和Oracle的数据提供者不支持这一特性
Database
String类型,返回已连接或即将连接的数据库名称
专为支持多个数据库的数据源设计,
DataSource
String类型,返回已连接或即将连接的数据源位置
基于服务器的数据存储,它会返回服务器计算机名
基于文件的数据库,会返回文件位置.
Provider
String类型,数据源提供者名称
ServiceVersion
String类型,数据源版本,常用于确保不向服务器作出不支持的调用.
State
ConnectionState类型,对象当前状态
连接状态常量
Broke
值=16,表示连接已经断开
Closed
值=0,连接已经关闭
Connecting
值=2.正在连接
Executing
值=4,正在执行查询
Fetching
值=8.查询正在取得数据
Open
值=1 .连接已经打开
后话
你可以使用Connection对象的StateChange事件来确定State属性的值何时变化.
OleDbConnection对象的方法
OleDbConnction对象常用方法表
方法名 |
简述 |
BeginTransaction |
在连接上启动一个事务 |
ChangeDatabase |
在一个打开的连接上更改当前数据库 |
Close |
关闭连接 |
CreateCommand |
为当前连接创建一个OleDbCommand |
GetOleDbSchemaTable |
从数据源获取架构信息 |
Open |
打开连接 |
ReleaseObjectPool |
从Ole Db连接池中释放连接 |
BeginTransaction方法
用于启动一个事务(事务是为锁定数据或确保你可以提交或回滚一系列更改而使用的功能)
返回一个Transaction对象.(想要提交事务处理,就在Transaction对象上调用Commit方法;想要回滚事务,就调用Transaction对象的Rollback方法)
代码演示
Dim txn As OleDb.OleDbTransaction=cn.BeginTransaction()
等价于
Dim txn As New OleDb.OleDbTransaction()
Txn.connection=cn
Txn.Begin()
ChangeDatabase方法
在Sql Server中,可以使用查询USE Northwind修改正在通讯的数据库
ADO.NET中Connection简化了该过程
代码演示
Dim cn As New OleDbConnection(strConn)
Cn.Open()
…
Cn.ChangeDatabase(“Northwind”)
等价于
Dim Cn As New OleDbConnection(strConn)
Cn.Open()
…
Dim Cmd As OleDbCommand=cn.CreateCommand()
cmd.Commandtext=”USE Northwind”
cmd.ExecuteNonQuery()
Close()方法
用于关闭Connection对象
切记,如果你正在使用连接池,那么这个方法只不过将与数据源的物理连接放入连接池中.
CreateCommand方法
用于创建新的Command对象.该方法不接受任何参数,返回一个新的Command对象(返回的对象的Connection属性被设置为创建它的Connection对象)
代码演示:
Dim strConn As String="Provider=SQLOLEDB;Data Source={local}"NetSDK;"&_
"Initial Catalog=Northwind;Trusted_Connection=Yes;"
Dim cn As New OleDbConnection(strConn)
Dim Cmd As OleDb.OleDbCommand=cn.CreateCommand()
等价于
Dim strConn As String="Provider=SQLOLEDB;Data Source={local}"NetSDK;"&_
"Initial Catalog=Northwind;Trusted_Connection=Yes;"
Dim cn As New OleDbConnection(strConn)
Dim cmd Ad new OleDb.OleDbCommand()
cmd.Connection=cn
GetOleDbSchemaTable方法
用于获取数据库架构信息.
第一个参数OleDbSchemaGuid是一个枚举类型,可以指定返回的架构信息的类型比如表/列或过程
第二个参数Restrictions,作为方法返回信息的过滤器.它包含这一个值数组
签名式
Public Function GetOleDbSchemaTable(ByVal schema As System.Guid, ByVal restrictions() As Object) As System.Data.DataTable
返回值的列结构(全部)
TABLE_CATALOG,TABLE_SCHEMA,TABLE_NAME,TABLE_TYPE,TABLE_GUID,DESCRIPTION,TABLE_PROPID,DATE_CREATED,DATE_MODIFIED
代码演示
获取所有的列信息
Dim strConn As String="Provider=SQLOLEDB;Data Source={local}"NetSDK;"&_
"Initial Catalog=Northwind;Trusted_Connection=Yes;"
Dim cn As New OleDbConnection(strConn)
cn.Open()
Dim tbl as DataTable
tbl=cn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables,Nothing)
获取指定表中的列信息
可以使用Restrictions参数,并提供所需表的名称
成员的Restrictions数组应该有如下结构:
{"TABLE_CATALOG","TABLE_SCHEMA","TABLE_NAME","COLUMN_NAME"}
Dim strConn As String="Provider=SQLOLEDB;Data Source={local}"NetSDK;"&_
"Initial Catalog=Northwind;Trusted_Connection=Yes;"
Dim cn As New OleDbConnection(strConn)
cn.Open()
Dim objRestrictions As Object() '对象数组
objRestrictions=new Object(){Nothing, Nothing, "Customers", Nothing}
Dim tbl as DataTable
tbl=cn.GetOleDbSchemaTable(OleDbSchemaGuid.Columns,objRestructions)
讨论
GetOleDbSchemaTable方法依赖于OleDbConnection所使用的OLE DB提供者的功能.
如果请求了不支持的架构,将会引发异常.
Open方法
用于尝试打开一个与数据源之间的连接.
如果尝试连接失败,将会引发异常.
在一个已经打开的连接上调用Open方法,会先关闭再重新打开该连接.
如果连接池可用,这种情况就会产生一个附加连接.初始连接会被放入连接池
但是,因为连接池是在另外一个线程上处理的,所以连续的请求连接时,初始连接有可能是无法使用的.
代码演示
Dim strConn As String="Provider=SQLOLEDB;Data Source={local}"NetSDK;"&_
"Initial Catalog=Northwind;Trusted_Connection=Yes;"
Dim cn As New OleDbConnection(strConn)
try
cn.Open()
catch ex as exception
Console.WriteLine(ex.Message)
end try
ReleaseObjectPool方法
用于释放对连接池的引用.(可以在连接或在OleDbConnection类本身调用)
自己管理物理连接(比较好的做法)
创建连接时,在连接字符串中包括如下代码段:
OLE DB Services=-4
OleDbConnection对象的事件
公开的对象事件列表
InfoMessage
当连接从数据源处接收到一个信息性消息时被触发
StateChange
当连接的State属性发生变化时被触发
InfoMessage事件
某些数据库系统提供信息性消息.比如:Sql Server.
Sql Server允许通过PRINT命令向客户端发送消息(消息不会作为错误而返回,也不包含在查询的结果之中)
使用此事件,捕获此类消息.
Sql Server还支持用RAISEERROR命令来生成信息性消息.如果该命令创建的错误的严重性级别在10级以下,它会被当作信息性消息处理.
代码演示
Dim strConn As String="Provider=SQLOLEDB;Data Source={local}"NetSDK;"&_
"Initial Catalog=Northwind;Trusted_Connection=Yes;"
Dim cn As New OleDbConnection(strConn)
AddHandler cn.InfoMessage, AddressOf cn_InfoMessage
cn.Open()
with cn.CreateCommand()
.CommandText="PRINT 'Hello ADO.NET!'"
.ExecuteNonQuery()
end with
public Sub cn_InfoMessage(Byval Sender as Object, ByVal e As System.Data.OleDb.OleDbInfoMessageEventArgs)
console.WriteLine("InfoMessage Event Occurred.")
console.writeLine(vbTab & "Message received: " & e.Message)
End Sub
StateChange事件
只要Connection对象的State属性值发生变化,这个事件就会被触发.
利用这个事件给应用程序主窗体的底端状态条增加显示连接状态功能
代码演示
Dim strConn As String="Provider=SQLOLEDB;Data Source={local}"NetSDK;"&_
"Initial Catalog=Northwind;Trusted_Connection=Yes;"
Dim cn As New OleDbConnection(strConn)
AddHandler cn.StateChange, AddressOf cn_StateChange
cn.Open()
cn.Close()
Public Sub cn_StateChange(ByVal sender as Object, ByVal e as System.Data.StateChangeEventArgs)
Console.WriteLine("StateChange Event Occurred.")
Console.WriteLine(vbTab & "From " & e.OriginalState.toString)
Console.WriteLine(vbTab & "To " & e.CurrentState.toString)
End Sub