C#使用ADO.Net连接数据库与DbProviderFactory实现多数据库访问

 更新时间:2022年05月11日 15:44:21   作者:springsnow  
这篇文章介绍了C#使用ADO.Net连接数据库与DbProviderFactory实现多数据库访问的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

一、ADO.Net数据库连接字符串

1、OdbcConnection(System.Data.Odbc)

(1)SQL Sever

标准安全:" Driver={SQL Server}; Server=Aron1; Database=pubs; Uid=sa; Pwd=asdasd; "

信任的连接:" Driver={SQL Server}; Server=Aron1; Database=pubs; Trusted_Connection=yes; "

(2)SQL Native Client ODBC Driver(>=SQL Server 2005)

标准安全" Driver={SQL Native Client}; Server=Aron1; Database=pubs; UID=sa; PWD=asdasd; "

信任的连接
" Driver={SQL Native Client}; Server=Aron1; Database=pubs; Trusted_Connection=yes; " --Integrated Security=SSPI 等同于Trusted_Connection=yes

(3)Oracle:

新版本:"Driver={Microsoft ODBC for Oracle}; Server=OracleServer.world; Uid=Username; Pwd=asdasd; "

旧版本:"Driver={Microsoft ODBC Driver for Oracle}; ConnectString=OracleServer.world; Uid=myUsername; Pwd=myPassword; "

(4)Access:

标准安全:"Driver={Microsoft Access Driver (*.mdb)}; Dbq=C:\mydatabase.mdb; Uid=Admin; Pwd=; "

2、OleDbConnection(System.Data.OleDb)

(1)SQL Sever

标准安全:" Provider=sqloledb; Data Source=Aron1; Initial Catalog=pubs; User Id=sa; Password=asdasd; "

信任的连接:
" Provider=sqloledb; Data Source=Aron1; Initial Catalog=pubs; Integrated Security=SSPI; " 
(use serverName\instanceName as Data Source to use an specifik SQLServer instance, only SQLServer2000)

(2)SQL Native Client OLE DB Provider(>=SQL Server 2005)

标准安全:" Provider=SQLNCLI; Server=Aron1; Database=pubs; UID=sa; PWD=asdasd; "

信任的连接:
" Provider=SQLNCLI; Server=Aron1; Database=pubs; Trusted_Connection=yes; " --Integrated Security=SSPI 等同于Trusted_Connection=yes

(3)Oracle:

标准安全:
"Provider=msdaora; Data Source=MyOracleDB; User Id=UserName; Password=asdasd; "
This one's from Microsoft, the following are from Oracle

标准安全:"Provider=OraOLEDB.Oracle; Data Source=MyOracleDB; User Id=Username; Password=asdasd; "

信任的连接:"Provider=OraOLEDB.Oracle; Data Source=MyOracleDB; OSAuthent=1; "

(4)Access:

标准安全:

"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=\somepath\mydb.mdb; User Id=admin; Password=; "

3、SqlConnection(Syste.Data.SqlClient) SQL专用

标准安全:

" Data Source=Aron1; Initial Catalog=pubs; User Id=sa; Password=asdasd; " 
- 或者 -" Server=Aron1; Database=pubs; User ID=sa; Password=asdasd; Trusted_Connection=False"

信任的连接:
" Data Source=Aron1; Initial Catalog=pubs; Integrated Security=SSPI; " 
- 或者 -
" Server=Aron1; Database=pubs; Trusted_Connection=True; " –(use serverName\instanceName as Data Source to use an specifik SQLServer instance, 仅仅适用于SQLServer2000)

4、OracleConnection(System.Data.OracleClient\Oracle.ManagedDataAccess.Client) Oracle专用

标准安全:
"Data Source=MyOracleDB; Integrated Security=yes; " --This one works only with Oracle 8i release 3 or later

指定用户名和密码:
"Data Source=MyOracleDB; User Id=username; Password=passwd; Integrated Security=no; "--This one works only with Oracle 8i release 3 or later

指定主机:
"Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP) (HOST=192.168.115.33) (PORT=1521)))(CONNECT_DATA=(SERVICE_NAME= testDemo))); User Id=oracle_test; Password=oracle"
其中Oracle数据库服务器IP:192.168.115.33
ServiceName:testDemo
用户名:oracle_test
密码:oracle

二、利用DbProviderFactory创建各种ADO.Net对象

DbProviderFactory是一个工厂类,工厂类的作用提供其他一系列相互之间有关系的类。在这里,DbProviderFactory就自动生成了包括DbConnection、DbCommand、 DbDataAdapter等一系列数据库操作的相关类。

1、配置文件ConnectionString节:

<configuration> 
    <connectionStrings> 
        <add name="default"  connectionString="server=localhost; user id=sa; password=******; database=northwind" 
             providerName="System.Data.SqlClient"/>
    </connectionStrings> 
</configuration>

2、利用DbProviderFactory类自动查找数据库的驱动

ConnectionStringSettings settings = ConfigurationManager.ConnectionStrings["default"];
DbProviderFactory provider = DbProviderFactories.GetFactory(settings.ProviderName);

3、利用DbProviderFactory类实例创建各种ADO.Net对象。

using (DbConnection conn = provider.CreateConnection())
{
    conn.ConnectionString = settings.ConnectionString;
    conn.Open();
    DbCommand cmd = conn.CreateCommand();
    cmd.CommandText = "Select top 10 * From ShortTermBill";
    
    //使用DbDataAdapter
    DbDataAdapter da = provider.CreateDataAdapter();
    da.SelectCommand = cmd;
    DataSet ds = new DataSet();
    da.Fill(ds);
    da.Dispose();
    Console.WriteLine(ds.Tables[0].Rows[0]["BillCode"]);
    
    //使用DbDataReader
    DbDataReader reader = cmd.ExecuteReader()
    while (reader.Read())
    {
        Console.WriteLine(reader.GetString(0));
    }
    conn.Close();
}

三、利用DbConnection获取数据库架构信息

SQL Server 架构集合 - ADO.NET | Microsoft 官方文档

class Program
{
    static void Main()
    {
        string connectionString = GetConnectionString();
        using (SqlConnection connection = new SqlConnection(connectionString))
        {
            // Connect to the database then retrieve the schema information.  
            connection.Open();string[] columnRestrictions = new String[4];

            // For the array, 0-member represents Catalog; 1-member represents Schema;
            // 2-member represents Table Name; 3-member represents Column Name.
            // Now we specify the Table_Name and Column_Name of the columns what we want to get schema information.
            columnRestrictions[2] = "Device";

            DataTable departmentIDSchemaTable = connection.GetSchema("Columns", columnRestrictions);

            ShowColumns(departmentIDSchemaTable);

        }
    }

    private static string GetConnectionString()
    {
        // To avoid storing the connection string in your code,  
        // you can retrieve it from a configuration file.  
        return "server=10.126.64.1;Database=TPM;user=it;pwd=;ApplicationIntent=ReadOnly;MultiSubnetFailover=True";
    }
    private static void ShowColumns(DataTable columnsTable)
    {
        var selectedRows = from info in columnsTable.AsEnumerable()
                           select new
                           {
                               TableCatalog = info["TABLE_CATALOG"],
                               TableSchema = info["TABLE_SCHEMA"],
                               TableName = info["TABLE_NAME"],
                               ColumnName = info["COLUMN_NAME"],
                               DataType = info["DATA_TYPE"],
                               ORDINAL_POSITION = info["ORDINAL_POSITION"],
                               COLUMN_DEFAULT = info["COLUMN_DEFAULT"],
                               IS_NULLABLE = info["IS_NULLABLE"],
                               CHARACTER_MAXIMUM_LENGTH = info["CHARACTER_MAXIMUM_LENGTH"],
                               NUMERIC_PRECISION = info["NUMERIC_PRECISION"],
                               NUMERIC_SCALE = info["NUMERIC_SCALE"],
                               DATETIME_PRECISION = info["DATETIME_PRECISION"],
                           };

        Console.WriteLine("{0,-15},{1,-15},{2,-15},{3,-15},{4,-15},{5,-15},{6,-15},{7,-15},{8,-15},{9,-15},{10,-15},{11,-15}", "TableCatalog", "TABLE_SCHEMA",
            "表名", "列名", "数据类型", "字段原始顺序", "列默认值", "是否可空", "字符串最大长度", "数字精度", "数字小数点位数", "日期精度"
            );
        foreach (var row in selectedRows)
        {
            Console.WriteLine("{0,-15},{1,-15},{2,-15},{3,-15},{4,-15},{5,-15},{6,-15},{7,-15},{8,-15},{9,-15},{10,-15},{11,-15}", row.TableCatalog,
                row.TableSchema, row.TableName, row.ColumnName, row.DataType, row.ORDINAL_POSITION, row.COLUMN_DEFAULT, row.IS_NULLABLE
                , row.CHARACTER_MAXIMUM_LENGTH, row.NUMERIC_PRECISION, row.NUMERIC_SCALE, row.DATETIME_PRECISION);
        }
    }
}

到此这篇关于C#使用ADO.Net连接数据库与DbProviderFactory实现多数据库访问的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • C#正则检测字符串是否字母数字混编的方法

    C#正则检测字符串是否字母数字混编的方法

    这篇文章主要介绍了C#正则检测字符串是否字母数字混编的方法,涉及C#正则判定字符串的使用技巧,需要的朋友可以参考下
    2015-06-06
  • 浅谈C#中HttpWebRequest与HttpWebResponse的使用方法

    浅谈C#中HttpWebRequest与HttpWebResponse的使用方法

    本篇文章主要介绍了浅谈C#中HttpWebRequest与HttpWebResponse的使用方法,具有一定的参考价值,有兴趣的可以了解一下。
    2017-01-01
  • C#实现流程图设计器

    C#实现流程图设计器

    这篇文章主要介绍了C#实现流程图设计器,感兴趣的小伙伴们可以参考一下
    2015-11-11
  • C# 多线程更新界面的错误的解决方法

    C# 多线程更新界面的错误的解决方法

    这篇文章主要介绍了C# 多线程更新界面的错误方法,由于一个线程的程序,如果调用一个功能是阻塞的,那么就会影响到界面的更新,导致使用人员操作不便。所以往往会引入双线程的工作的方式,主线程负责更新界面和调度,而次线程负责做一些阻塞的工作,便有了下面春雨里方法
    2021-10-10
  • C#把数组中的某个元素取出来放到第一个位置的实现方法

    C#把数组中的某个元素取出来放到第一个位置的实现方法

    这篇文章主要介绍了C#把数组中的某个元素取出来放到第一个位置的实现方法,涉及C#针对数组的常见操作技巧,非常具有实用价值,需要的朋友可以参考下
    2014-12-12
  • C#提高编程能力的50个要点总结

    C#提高编程能力的50个要点总结

    这篇文章主要介绍了C#提高编程能力的50个要点,较为详细的总结分析了C#程序设计中常见的注意事项与编程技巧,需要的朋友可以参考下
    2016-02-02
  • 详解三种C#实现数组反转方式

    详解三种C#实现数组反转方式

    本篇文章主要介绍了详解三种C#实现数组反转方式,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-04-04
  • c#递归遍历文件夹示例

    c#递归遍历文件夹示例

    这篇文章主要介绍了c#递归遍历文件夹示例,需要的朋友可以参考下
    2014-03-03
  • 解析C#中如何把控件的边框角画为圆弧

    解析C#中如何把控件的边框角画为圆弧

    以下是对C#中把控件的边框角画为圆弧的实现代码进行了介绍,需要的朋友可以参考下
    2013-07-07
  • C#调用Polly库实现捕捉异常处理的操作代码

    C#调用Polly库实现捕捉异常处理的操作代码

    Polly 是一个 .NET 弹性和瞬态故障处理库,允许开发人员以 Fluent 和线程安全的方式来实现重试、断路、超时、隔离和回退策略,本文给大家介绍了C#调用Polly库实现捕捉异常处理操作,文中有详细的代码示例供大家参考,需要的朋友可以参考下
    2024-08-08

最新评论