• ADO.NET笔记——使用通用数据访问


    相关知识:

    1. 前面所有示例,君是访问特定的数据库(SQL Server),因此注入SqlConnection、SqlCommand、SqlDataReader、SqlDataAdapter等类名都添加了“Sql”的前缀,并且隶属于System.Data.SqlClient命名空间。这就给代码的可移植性带来了巨大问题。如果数据库改用Oracle、MySQL或者BD2,代码几乎要全部重写,非常不利于重用。
    2. System.Data.Common命名空间提供了一组类和操作,使得程序可以忽略底层数据库的差异,进行统一的调用
      • DbProviderFactories:代表所有的数据提供程序
      • DbProviderFactory:代表某个特定的数据提供程序,例如:System.Data.SqlClient
      • DbConnection、DbCommand、DbDataReader:与数据库实现无关的对象类型
    3. 使用通用数据库访问,在很大程度上可以使数据访问代码与数据库无关

    主要代码:

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using System.Threading.Tasks;
     6 using System.Data;
     7 using System.Data.Common;
     8 
     9 namespace ConsoleApplication16
    10 {
    11     class Program
    12     {
    13         const string provider = "System.Data.SqlClient";
    14         const string strConn = @"server=Joe-PC;database=AccountDBforSQLInjection;uid=sa;pwd=root";
    15 
    16         static void Main(string[] args)
    17         {
    18             //获取数据提供程序工厂类
    19             DbProviderFactory factory = DbProviderFactories.GetFactory(provider);
    20 
    21             //通过工厂创建连接对象
    22             DbConnection conn = factory.CreateConnection();
    23             conn.ConnectionString = strConn;
    24 
    25             //通过工厂创建命令对象
    26             DbCommand cmd = factory.CreateCommand();
    27             cmd.Connection = conn;
    28             cmd.CommandText = "SELECT AccountID, AccountName, password FROM Account";
    29 
    30             try
    31             {
    32                 conn.Open();
    33                 DbDataReader dr = cmd.ExecuteReader();
    34 
    35                 while (dr.Read())
    36                 {
    37                     Console.WriteLine("{0}:{1},{2}", dr[0], dr[1], dr[2]);
    38                 }
    39             }
    40             catch (Exception e)
    41             {
    42                 Console.WriteLine(e);
    43             }
    44             finally
    45             {
    46                 conn.Close();
    47             }
    48         }
    49     }
    50 }
  • 相关阅读:
    NOI Online 2020「Prelude」
    CF704E Iron Man
    luogu P4619 [SDOI2018]旧试题
    luogu P4207 [NOI2005]月下柠檬树
    JOI2020
    luogu P3263 [JLOI2015]有意义的字符串
    p1864
    p1824
    p1836
    p1862
  • 原文地址:https://www.cnblogs.com/chenguangqiao/p/4373539.html
Copyright © 2020-2023  润新知