首頁 > 後端開發 > C#.Net教程 > 什麼是ado.net以及其簡單實作詳解

什麼是ado.net以及其簡單實作詳解

伊谢尔伦
發布: 2017-05-31 14:32:27
原創
3637 人瀏覽過

一、介紹

     ado.net是.net framework的資料提供程序,它主要有SqlConnection、SqlCommand、SqlDataAdapter、SqlDataReader和DataSet五大物件構成,結構如下圖

  1.SqlConnection類別表示一個sql server資料庫的一個連接

    連接字串格式一般有以下兩種形式,具體參數可參考msdn

               1)Persist Security Info=False;Integrated Security=true;Initial Catalog=Northwind;server=(local)

# . =sa;Password=123;

    建立一個連線如下

      SqlConnection## conn = Connection SqlConnection## conn = Connection ##(connString);  

2.SqlCommand

類別表示資料庫執行指令物件          1)用來設定需要執行的sql腳本或預存程序、逾時時間、參數和交易等。

          2)建立方式如下

          

   

SqlConnectionc();            //

## CreateCommand();            

 

//方式二

 SqlCommand cmd = new

 

SqlCommand();## cmd.CommandText = "select * from table" ;

            cmd.Connection = conn; 3)幾個主要方法            ExecuteNonQuery:對連線執行sql語句並傳回受影響行數,主要執行增、刪和改運算

            ExecuteReader:執行查詢返回SqlDataReader物件

            ExecuteScalar:執行查詢結果集的第一行與第一列結果中的第一行與第一列表示Adapter類別用來填入DataSet與更新資料庫資料指令與資料庫連線

          此類別有4種建構子如下

       

 

#public##       

 

#        #        

#o

##' #SqlDataAdapter();       

 

1 SqlDataAdapter(#SqlCommandselectCommand);selectCommand);selectCommand);selectCommand);selectCommand);selectCommand);

       

#public SqlDataAdapter(string #selectCommandText, SqlConnectionSqlConnection#selectConnection);

       

 

public SqlDataAdapter(

string selectCommandText,

 

string

 

selectConnectionString);

     

4.SqlDataReader

類別提供一個資料流只會讀取#     ##類別提供一個資料流只進方式讀取

     

5.DataSet

類別表示資料在記憶體中的快取


二、ADO.NET簡單實作

     下方實作一個增、刪除、變更、查的例子

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

public class EasySqlHelper

    {

        //web.config来配置

        //private static string connString = ConfigurationManager.AppSettings["SqlConnectionString"];

        private static string connString = "Server=.;Database=demodb;User=sa;Password=123;";

 

        public static int ExecuteNonQuery(string sql)

        {

            using (SqlConnection conn = new SqlConnection(connString))

            {

                using (SqlCommand cmd = new SqlCommand(sql, conn))

                {

                    if (conn.State != ConnectionState.Open)

                    {

                        conn.Open();

                    }

 

                    return cmd.ExecuteNonQuery();

                }

            }

        }

 

        public static SqlDataReader ExecuteReader(string sql)

        {

            SqlConnection conn = new SqlConnection(connString);

            SqlCommand cmd = new SqlCommand(sql, conn);

            SqlDataReader rdr = null;

 

            try

            {

                if (conn.State != ConnectionState.Open)

                {

                    conn.Open();

                }

 

                rdr = cmd.ExecuteReader();

            }

            catch (SqlException ex)

            {

                conn.Dispose();

                cmd.Dispose();

 

                if (rdr != null)

                {

                    rdr.Dispose();

                }

 

                throw ex;

            }

            finally

            {

                cmd.Dispose();

            }

 

            return rdr;

        }

 

        public static DataTable ExecuteDataTable(string sql)

        {

            using (SqlConnection conn = new SqlConnection(connString))

            {

                using (SqlCommand cmd = new SqlCommand(sql, conn))

                {

                    if (conn.State != ConnectionState.Open)

                    {

                        conn.Open();

                    }

 

                    SqlDataAdapter adp = new SqlDataAdapter(cmd);

                    DataSet ds = new DataSet();

                    adp.Fill(ds);

 

                    return ds.Tables[0];

                }

            }

        }

    }

登入後複製

  上面程式碼中使用using來確保資源釋放,所有實作IDisposable介面的類別都可以用using來釋放,即使在呼叫物件的方法上發生異常也會釋放。

三、建立不同提供者的資料來源類別實例

     上面程式碼只對sql server有效,如果要實作不同資料庫如oracle則又需要另外寫一套代碼,.Net提供了DbProviderFactory類別來建立不同資料庫實例。      同時上面5大物件也要換成DbConnection、DbCommand、DbDataReader、DbDataAdapter把特定sql server物件抽象化成更具體和資料庫類型無關物件。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

//// <summary>

    /// 连接信息

    /// </summary>

    public class ConnectionInfo

    {

        private string _connectionString;

        private string _providerName;

 

        /// <summary>

        /// 连接字符串

        /// </summary>

        public string ConnectionString

        {

            get { return _connectionString; }

        }

 

        /// <summary>

        /// 提供程序的固定名称

        /// </summary>

        public string ProviderName

        {

            get { return _providerName; }

        }

 

        public ConnectionInfo(string connectionString, string providerName)

        {

            _connectionString = connectionString;

            _providerName = providerName;

        }

    }

 

    public class MySqlHelper

    {

        private static DbProviderFactory dbProvider;

 

        private static readonly ConnectionInfo connInfo = new ConnectionInfo("Server=.;Database=demodb;User=sa;Password=123;""System.Data.SqlClient");

 

        private static void GetProvider()

        {

            dbProvider = DbProviderFactories.GetFactory(connInfo.ProviderName);

        }

 

        static MySqlHelper()

        {

            GetProvider();

        }

 

        public static int ExecuteNonQuery(string sql, DbParameter[] parameters)

        {

            int flag = 0;

 

            using (DbConnection conn = dbProvider.CreateConnection())

            {

                conn.ConnectionString = connInfo.ConnectionString;

                conn.Open();

 

                using (DbCommand cmd = conn.CreateCommand())

                {

                    cmd.CommandText = sql;

 

                    if (parameters != null && parameters.Length > 0)

                    {

                        cmd.Parameters.AddRange(parameters);

                    }

 

                    flag = cmd.ExecuteNonQuery();

                }

            }

 

            return flag;

        }

 

        public static void ExecuteReader(string sql, DbParameter[] parameters, Action<IDataReader> action)

        {

            IDataReader rdr = null;

             

            using (DbConnection conn = dbProvider.CreateConnection())

            {

                conn.ConnectionString = connInfo.ConnectionString;

                conn.Open();

 

                using (DbCommand cmd = conn.CreateCommand())

                {

                    cmd.CommandText = sql;

 

                    if (parameters != null && parameters.Length > 0)

                    {

                        cmd.Parameters.AddRange(parameters);

                    }

 

                    rdr = cmd.ExecuteReader();

 

                    action(rdr);

 

                    rdr.Close();

                }

            }

        }

 

        public static DataTable ExecuteDataTable(string sql, DbParameter[] parameters)

        {

            DataTable dt = null;

 

            using (DbConnection conn = dbProvider.CreateConnection())

            {

                conn.ConnectionString = connInfo.ConnectionString;

                conn.Open();

 

                using (DbCommand cmd = conn.CreateCommand())

                {

                    cmd.CommandText = sql;

 

                    if (parameters != null && parameters.Length > 0)

                    {

                        cmd.Parameters.AddRange(parameters);

                    }

 

                    IDataReader rdr = cmd.ExecuteReader();

 

                    dt = new DataTable();

                    dt.Load(rdr);

 

                    rdr.Close();

                     

                }

 

                return dt;

            }

        }

    }

登入後複製

四、其它第三方框架

  有Dapper、IBatis.Net等等,可以參考學習下

【相關推薦】

1. ###ASP.NET免費影片教學##########2. ###C#使用Ado.Net更新並新增資料到Excel表格的方法#########3. ###ADO.NET 讀取EXCEL的實作碼((c#))#########4. ###ADO.NET呼叫儲存過程#########5. ###ado.net 連線vs 資料庫程式碼#######

以上是什麼是ado.net以及其簡單實作詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
解決PHP錯誤顯示問題的方法
來自於 1970-01-01 08:00:00
0
0
0
java - springboot新手學習
來自於 1970-01-01 08:00:00
0
0
0
spring - JavaWeb中 Service 層的事務問題
來自於 1970-01-01 08:00:00
0
0
0
java - C語言演算法題-韓信點兵 解法?
來自於 1970-01-01 08:00:00
0
0
0
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板