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 }

 

你可能感兴趣的:(.net)