现在的位置: 首页 > 综合 > 正文

数据库-与数据库连接

2012年08月09日 ⁄ 综合 ⁄ 共 6422字 ⁄ 字号 评论关闭

 

与数据库连接

.     引入必要的名字空间

.     使用Connection对象

1     创建Connection对象

2     连接字符串

2.1     三种最常用的OLEDB提供程序(Access,SQL SERVER, Oracle)所用的连接字符串

2.1.1    SQL SERVER OLEDB提供程序

2.1.2    Oracle OLEDB提供程序

2.1.3    Access OLEDB提供程序

2.1.4    ODBC Drivers的OLEDB的提供程序

2.2     使用[数据连接属性]对话框在代码中建立连接字符串

2.2.1    在VS.NET中使用[数据链接属性]对话框,首先必须有一个对数据链接库的引用.

2.2.2     用代码来加载[数据链接属性]对话框,并获取用户输入的连接字符串

2.3     手动建立连接字符串-通过udl文件

2.4     在连接字符串中使用数据链接文件

2.4.1     在连接字符串中动态引用一个数据链接文件.

3     开放和关闭连接

3.1         调用Open方法打开连接

3.2         使用Connection对象的Close方法可以关闭连接

4     连接池

4.1         何为连接池?

4.2         如何打开连接池?

4.3         不使用连接池

4.3.1     关闭连接池

4.3.2     识别:连接——真正关闭了Or仅仅被放入池中

4.4         销毁连接

5     使用连接对象(Connection)创建其他对象

5.1         创建Command

5.2         启动事务

一. 引入必要的名字空间

l         VBNET代码

Imports System.Data

Imports System.Data.OleDb

Imports System.Data.SqlClient

l         C#代码

using System.Data;

using System.Data.OleDb;

using System.Data.SqlClient;

二. 使用Connection对象

l         使用Connection对象的属性指定数据源的位置

l         用Connection对象控制与数据源连接或断开连接

l         将Connection对象作为创建Command和Transaction对象的起始点

 

1         创建Connection对象

Dim cn as OleDbConnection

cn=new OleDbConneciton()

可以在什么变量的同时进行初始化,如下

Dim cn as new OleDbConnection()

2         连接字符串

Connection对象的ConnectionString属性需要一个连接字符串

连接字符串包含一系列名称/值对,并用分号进行隔离,格式如下:

strConn=”Setting1=Value1;Setting2=Value;...”

2.1         三种最常用的OLEDB提供程序(Access,SQL SERVER, Oracle)所用的连接字符串

2.1.1                   SQL SERVER OLEDB提供程序

Provider=SQLOLEDB.1; Data Source=<Server>;Initial Catalog=<DataBase>;Use ID=<>;Password=<>

2.1.2                   Oracle OLEDB提供程序

Provider=MSDAORA; Data Source=<>;UID=<>;PWD=<>

2.1.3                   Access OLEDB提供程序

Provider=Microsoft.Jet.OLEDB.4.0; Data Source=<>

2.1.4                   ODBC Drivers的OLEDB的提供程序

ODBC提供程序经常通过其代码名称Kagera被引用.

Kagera通过将OLEDB API调用转换为ODBC API调用来实现,OLEDB .NET数据提供者与该OLEDB提供者进行会话,然后再去ODBC驱动程序进行会话.听起来就很复杂,维持提供了ODBC.NET数据提供程序.

2.2         使用[数据连接属性]对话框在代码中建立连接字符串

2.2.1                   在VS.NET中使用[数据链接属性]对话框,首先必须有一个对数据链接库的引用.

具体作法是:在打开的”解决方案”中,”添加引用”,在”COM” 选项卡,选择”Microsoft ActiveX Data Object 2.7 Library”的引用和”Microsoft OLE DB Service Component 1.0 Type Library”的引用,并添加.

2.2.2                   用代码来加载[数据链接属性]对话框,并获取用户输入的连接字符串

Dim objDataLink as New MSDASC.DataLink()

Dim cn As New ADODB.Connection()

 

objDataLink.PromptEdit(cn)

Console.WriteLine(cn.ConnectionString)

2.3         手动建立连接字符串-通过udl文件

你只需要一个扩展名.udl的文件即可

2.4         在连接字符串中使用数据链接文件

2.4.1                   在连接字符串中动态引用一个数据链接文件.

这需要在连接字符串中使用如下的一个名称/值对:

File Name=MyDataLink.udl;

如果不指定文件绝对路径,那么OLEDB.NET数据提供程序会在引用程序的当前路径中查找.

你也可以使用相对的路径

3         开放和关闭连接

拥有了有效的连接字符串的OleDbConnection对象后,就是打开连接以及与数据存储进行通讯.

3.1         调用Open方法打开连接

Dim strConn as String=”Provider=SQLOLEDB;”&_

                        “Data Source=(local)"NetSdk;”&_

                        “Initial Catalog=Northwind;”&_

                        “Trusted_Connection=Yes;”

Dim cn As New OleDbConnection(strConn)

cn.Open()

3.2         使用Connection对象的Close方法可以关闭连接

cn.Close()

    注意:如果使用了连接池,那么关闭Connection对象,不会关闭与数据源的实际连接.

4         连接池

打开和关闭数据库连接的代价是非常高昂的.

使用连接池能帮助应用程序提高性能.

4.1         何为连接池?

假设一个多层应用程序中,只要有一个客户端总是跟中间层通讯,那么服务器就需要不停的创建一个与数据库连接并查询的业务对象,通常,业务对象在清除代码中会关闭连接,这个代价就很高昂了

如果使用连接池会怎样?新的业务对象会检查池中的连接,如果有打开的连接,业务对象会使用它.

 

ADO.NET的连接池很简单,每个包含在ADO.NET中的.NET数据提供程序都可以实现连接池

连接池中打开的连接在特定时间(默认60秒)未被再次使用,就会关闭此连接

4.2         如何打开连接池?

连接池默认就是打开的.因此在调用Close方法时,连接实际上并未关闭,而是被传递到池中等待重用.

Dim strConn as String=”Provider=SQLOLEDB;”&_

                        “Data Source=(local)"NetSdk;”&_

                        “Initial Catalog=Northwind;”&_

                        “Trusted_Connection=Yes;”

Dim cn As New OleDbConnection(strConn)

Dim i as Integer

For i=0 to 5

cn.Open()

cn.Close()

Next

连接池是在一个独立线程上进行处理的.这样做的结果就是代码可能会创建另外一个与数据库的连接.

上面的代码,,Open()之后连接池例程可能还未完成将数据库连接存储到池中的操作,因此可以在Close()后面添加代码行,用来挂起当前线程,让其他线程执行: System.Threading.Thread.Sleep(0)

4.3    不使用连接池

4.3.1                   关闭连接池

调用OleDbConnection类的ReleaseConnectionPool方法

这个方法与Collect方法联合起来,应用于全局垃圾收集对象上,从而达到真正关闭与数据库的物理连接的目的

还有一个更好的方法,就是将属性(OLE DB Services=-4)添加到你的OLE DB连接字符串

使用有上述属性的连接字符串,OLE DB.NET数据提供程序会为连接做标记,这样的连接不会加入连接池,如此一来,OLEDBConnection对象的Close方法就能真正关闭连接

对于SQLConnection对象来说,需要添加的属性是(Pooling=False)

4.3.2                   识别:连接——真正关闭了Or仅仅被放入池中

检查连接到SQL SERVER的连接数目,比如用:

l         SQL时间探查器, 观察连接到数据库的连接数目

l         性能监视器, 观察连接到数据库的连接数目

l         企业管理器,检查重复调用系统存储过程的结果

4.4    销毁连接

调用ADONET对象模型中各个类的Dispose方法(这是个公开方法).

调用此方法可使对象在进行垃圾收集之前释放其资源

如果不显示调用Dispose,对象仅在公共语言运行库的垃圾收集程序发出指令时才释放资源

注意:通过让对象溢出或者将对象变量设置为Nothing,不会关闭与数据源的连接.

通常,如果一个对象公开了Dispose方法,那么想要是否对象的资源时,就要调用这个Dispose方法.

5         使用连接对象(Connection)创建其他对象

可以用Connection对象创建的其他对象有:Command对象以及Transaction对象等.

这种方式可以简化一些代码.

5.1    创建Command

Command对象是用来查询数据的

执行查询之前,需要为Command对象的Connection属性设置一个Connection对象.

Connection对象提供的CreateCommand方法简化了此过程,它返回一个Command对象(已经初始化了Connection属性的)

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 cmd As New OleDbCommand()等价代码: Dim cmd as OleDbCommand=cn.CreateCommand()

Cmd.Connection=cn

 

用With块简化使用一次性Command对象的过程:

With cn.CreateCommand()

    .CommandText=”Create TABLe MyTable…”

    .ExcuteNonQuery()

    .Dispose()

End With

5.2    启动事务

用Connection对象来启动事务(创建事务对象)

Connection对象提供的BeginTransaction方法会在连接时返回一个新的打开的Transaction对象.

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 txn As New OleDbTransaction()等价代码:Dim txn As OleDbTransaction=cn.BeginTransaction()

txn.Connection=cn

txn.begin

5.3         获取数据库架构信息

通过调用OleDbConnection对象的GetOleDbSchemaTable方法可以获取有关数据库的架构信息.

另外提供给该方法一个OleDbSchemaGuid枚举类型的值,可以指定所需的架构信息类型,如:表/列或过程

该方法的另外一个参数Restrictions,用于过滤返回的信息.例如仅取回特定表中的列信息

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参数(结构{“TABLE_CATALOG”,”TABLE_SCHEMA”,”TABLE_NAME”,”COLUMN_NAME”}),代码如下:

<打开连接过程省略>

Dim objRestrictions as Object()

objRestrictions=New Object(){Nothing,Nothing,”Customers”,Nothing}

Dim tbl as DataTable=cn.GetOleDbSchemaTable(OleDbSchemaGuid.Columns,objRestrictions)

该方法返回的是一个DataTable对象,其中包含了架构信息.可以使用循环来取得架构信息

Tbl=cn.GetOleDbSchemaTable(OleDbSchemaGuid.Columns,strRestrictions)

For each row in tbl.Rows

    Console.WriteLine(vbTab & row(“COLUMN_NAME”).ToString()

Next row

另外,GetOleDbSchemaTable方法依赖于OleDbConnection所使用的Ole DB提供程序的功能.

 

抱歉!评论已关闭.