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 }

 

posted @ 2015-03-28 04:23  .Joe.Chen  阅读(255)  评论(0编辑  收藏  举报