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();
        }
    }
}

運行結果如下:

     


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM