C# 数据库连接字符串

      ADO.NET连接数据库时,实例化***Connection(例如:OleDbConnection 、SqlConnection等)的时候需要指定连接字符串,除了利用抽象工厂模式利用反射实现灵活的连接之外,还可以通过DbProviderFactory类实现一定的灵活性。

     首先介绍两个类:DbProviderFactory和DbProviderFactories。

     DbProviderFactories:提供一组静态方法,这些方法用于创建 DbProviderFactory类的一个或多个实例。 方法列表如下:

     DbProviderFactory:提供一组方法,这些方法用于创建提供程序对数据源类的实现的实例。

     通常情况下,获取Access数据操作基本代如下:

1             string pathString = "\\database.mdb";
2             string conString = "Provider=Microsoft.Jet.Oledb.4.0;Data Source=" + pathString;
3             OleDbConnection DataOleDbConnection = new OleDbConnection(conString);
4             DataOleDbConnection.Open();
5             OleDbCommand DataOleDbCommand = new OleDbCommand("select * from table_user", DataOleDbConnection);
6             OleDbDataReader DataOleDbDataReader = DataOleDbCommand.ExecuteReader();
7             return DataOleDbDataReader;

      查看代码就会发现数据提供者(Provider=Microsoft.Jet.Oledb.4.0)在连接字符串中已经给定,这样程序就失去了一定的灵活性,虽然可用switch...case语句构造不同的连接对象,但是更好的办法是利用DbProviderFactory和DbProviderFactories根据选择的提供者动态的创建这些对象。其过程很简单,就是将包含提供者名的字符串传递给DbProviderFactories类的静态方法GetFactory(),该方法返回一个工厂对象(DbProviderFactory),这个对象用于创建提供者所需的指定的对象。代码如下:

 1             DbProviderFactory factory;
 2             string provider = "System.Data.SqlClient";
 3             string connstr = "Data Sourse =;Initial Catalog =;User Id = ;Password = ";
 4             factory = DbProviderFactories.GetFactory(provider);
 5             using (DbConnection conn = factory.CreateConnection())
 6             {
 7                 conn.ConnectionString = connstr;
 8                 try
 9                 {
10                     conn.Open();
11                     DbCommand cmd = factory.CreateCommand();
12                     cmd.CommandText = "Select * from table_name";
13                     cmd.Connection = conn;
14                     DbDataReader dr;
15                     dr = cmd.ExecuteReader();
16                     dr.Read();
17                     conn.Close();
18                 }
19                 catch (System.Exception ex)
20                 {
21                     Console.WriteLine(ex.Message);
22                 }
23             }

    对于 string provider = "System.Data.SqlClient"可以通过下列方法获取System.Data.Common.DbProviderFactory的所有已安装提供程序的信息。

using System;
using System.Text;
using System.Data.Common;
using System.Data;

namespace Demo
{
    class Program
    {
        static void Main(string[] args)
        {

            DataTable dt = DbProviderFactories.GetFactoryClasses();
            foreach (DataRow dr in dt.Rows)
            {
                StringBuilder sb = new StringBuilder();
                for (int i = 0; i < dt.Columns.Count; i++)
                {
                    sb.Append((i + 1).ToString() + " ").Append(dr[i].ToString());
                    sb.Append("\n");
                }
                Console.WriteLine(sb.ToString());
            }
            Console.ReadKey();
        }
    }
}

运行结果如下:

     

posted @ 2014-10-13 17:49  徘徊在路上  阅读(5906)  评论(0编辑  收藏  举报