zoukankan      html  css  js  c++  java
  • ADO.NET系列之Connection对象

    ADO.NET概念

    ADO.NET 提供对诸如 SQL Server 和 XML 这样的数据源以及通过 OLE DB 和 ODBC 公开的数据源的一致访问。 共享数据的使用方应用程序可以使用 ADO.NET 连接到这些数据源,并可以检索、处理和更新其中包含的数据。ADO.NET 类位于 System.Data.dll 中,并与 System.Xml.dll 中的 XML 类集成。

    简单的理解就是,微软定义了一堆关于操作数据源的接口和类,是C#语言访问数据源的一种方式。

    ADO.NET常用对象

    • Connection      → 数据库连接器
    • Command       → 数据库命名对象
    • DataReader   →数据读取器
    • DataAdapter   →数据适配器,填充DataSet

     Connection对象 

     Connection对象也称为数据库连接对象,Connection对象的功能是负责对数据源的连接。所有Connection对象的基类都是DbConnection类,DbConnection 对象位于命名空间     System.Data.Common,.Net提供了四种Connection 对象:

    1.   针对Sql Server的SqlConnection,位于命名空间System.Data.SqlClient下
    2.   针对Oledb链接的OledbConnection,位于命名空间System.Data.Oledb下
    3.   针对MySql的MySqlConnection,位于命名空间System.Data.MySqlClient下(需要引用MySql.Data.dll)
    4.   针对Oracle的OracleConnection,位于命名空间Oracle.ManagedDataAccess.Client(需引用Oracle.ManagedDataAccess.dll)

      我们都知道,链接数据源的时候,首先第一步得获取链接字符串ConnectionString,每一种数据源都有自己的链接字符串格式

          SQL链接字符串:“Data Source=.;Initial Catalog=ax_log;User Id=sa;Password=sa;”

          MySql链接字符串:"server=.;database=ax_log;user id=sa;password=sa;Charset=utf8"

          Access链接字符串:“Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:Database.mdb;User Id=sa;Password=sa;”

          Oracle链接字符串:“USER ID=sa;DATA SOURCE=192.168.0.2/ax_log;PASSWORD=sa”

       ConnectionStringBuilder对象

       如果记不清楚链接字符串的格式怎么办,没关系,你只需要记住一个对象就能帮你生产链接字符串,这个对象是ConnectionStringBuilder

    SqlConnectionStringBuilder,MySqlConnectionStringBuilder,DbConnectionStringBuilder都继承DbConnectionStringBuilder基类
                SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder();
                builder.DataSource = ".";
                builder.InitialCatalog = "ax_log";
                builder.UserID = "sa";
                builder.Password = "sa";
                Console.WriteLine(builder.ConnectionString);

    结果:Data Source=.;Initial Catalog=ax_log;User ID=sa;Password=sa
                MySql.Data.MySqlClient.MySqlConnectionStringBuilder mysqlbuild = new MySql.Data.MySqlClient.MySqlConnectionStringBuilder();
                mysqlbuild.Server = ".";
                mysqlbuild.Database = "ax_log";
                mysqlbuild.UserID = "sa";
                mysqlbuild.Password = "sa";
                Console.WriteLine(mysqlbuild.ConnectionString);

                结果:Server=.;Database=ax_log;User Id=sa;Password=sa
      Oracle.ManagedDataAccess.Client.OracleConnectionStringBuilder oraclebuil = new Oracle.ManagedDataAccess.Client.OracleConnectionStringBuilder();
                oraclebuil.DataSource = "192.168.0.2/ax_log";
                oraclebuil.UserID = "sa";
                oraclebuil.Password = "sa";
                Console.WriteLine(oraclebuil.ConnectionString);

    结果:USER ID=sa;PASSWORD=sa;DATA SOURCE=192.168.0.2/ax_log

     我们继续来介绍Connection对象 ,首先我们先做个小示例:测试是否能够正常链接到数据库

     string connectionString = "Data Source=.;Initial Catalog=ax_log;User Id=sa;Password=sa123;";
                using (SqlConnection connection = new SqlConnection(connectionString))
                {
                    try
                    {
                        connection.Open();
                        if (connection.State == ConnectionState.Open)
                        {
                            Console.WriteLine("链接数据库成功");
                            Console.WriteLine("状态:" + connection.State);
                        }
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine("链接数据库失败:" + ex.Message);
                    }
                }

       上代码有几个需要我们关注的地方:

        其一:connection.Open();  Open方法是打开数据库链接的意思,但是一定要记得关闭或者释放,因为连接池有最大限制,如果不及时关闭,当达到最大值的时候,会出现无法链接情况。关闭释放:connection.Close()//关闭链接,connection.Dispose()//释放资源。还可以使用另外一种方式Using,using语句的作用是确保资源使用后,并很快释放它们。using语句帮助减少意外的运行时错误带来的潜在问题,它整洁地包装了资源的使用。

              连接池就是这样一个容器:它存放了一定数量的与数据库服务器的物理连接。因此,当我们需要连接数据库服务器的时候,只需去池(容器)中取出一条空闲的连接,而不是新建一条连接。这样的话,我们就可以大大减少连接数据库的开销,从而提高了应用程序的性能

       其二:ConnectionState表示链接状态是一个eunm类型:

     //
            // 摘要:
            //     连接处于关闭状态。
            Closed = 0,
            //
            // 摘要:
            //     连接处于打开状态。
            Open = 1,
            //
            // 摘要:
            //     连接对象正在与数据源连接。(该值是为此产品的未来版本保留的。)
            Connecting = 2,
            //
            // 摘要:
            //     连接对象正在执行命令。(该值是为此产品的未来版本保留的。)
            Executing = 4,
            //
            // 摘要:
            //     连接对象正在检索数据。(该值是为此产品的未来版本保留的。)
            Fetching = 8,
            //
            // 摘要:
            //     与数据源的连接中断。只有在连接打开之后才可能发生这种情况。可以关闭处于这种状态的连接,然后重新打开。(该值是为此产品的未来版本保留的。)
            Broken = 16

      Connection对象的几个属性:

       Database在连接打开之后获取当前数据库的名称,或者在连接打开之前获取连接字符串中指定的数据库名。

       DataSource获取要连接的数据库服务器的名称。

       ConnectionTimeOut获取在建立连接时终止尝试并生成错误之前所等待的时间。

       ConnectionString获取或设置用于打开连接的字符串。

       State获取描述连接状态的字符串

     string connectionString = "Data Source=.;Initial Catalog=ax_log;User Id=sa;Password=sa;";
                using (SqlConnection connection = new SqlConnection(connectionString))
                {
                    Console.WriteLine("DataSource:"+connection.DataSource);
                    Console.WriteLine("Database:"+connection.Database);
                    Console.WriteLine("State:" + connection.State);
                    Console.WriteLine("ConnectionTimeout:" + connection.ConnectionTimeout);
                    Console.WriteLine("ConnectionString:" + connection.ConnectionString);
                }

    结果:

                       DataSource:.
                       Database:ax_log
                       State:Closed
                       ConnectionTimeout:15
                       ConnectionString:Data Source=.;Initial Catalog=ax_log;User Id=sa;Password=sa;

    
    
  • 相关阅读:
    JPEG compression
    GPU编程库
    亚马逊AWS服务器CentOS/Linux系统Shell安装Nginx及配置自启动
    如何查看mac系统是32位还是64位的操作系统
    mac解压7z格式文件
    vi中跳到文件的第一行和最后一行
    docker学习记录
    git 比较两个分支不同的commit
    meta property=og标签含义及作用
    php发现一个神奇的函数
  • 原文地址:https://www.cnblogs.com/zyh000/p/10253796.html
Copyright © 2011-2022 走看看