zoukankan      html  css  js  c++  java
  • 数据库与数据库连接

     

    与数据库连接

    .     引入必要的名字空间

    .     使用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提供程序的功能.

  • 相关阅读:
    【转】WINDOWS消息响应,以及处理分派机制
    web服务器分析与设计(四)
    c++ 概念及学习/c++ concept&learning(三)
    c++ 概念及学习/c++ concept&learning(二)
    【重读】The C++ Programming Language/C++编程语言(一)
    web服务器分析与设计(三)
    web服务器分析与设计(二)
    web服务器分析与设计(一)
    c++ 概念及学习/c++ concept&learning(一)
    windows服务1053错误排查
  • 原文地址:https://www.cnblogs.com/lizunicon/p/1288368.html
Copyright © 2011-2022 走看看