程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> ADO.NET基礎開發,ado.net開發

ADO.NET基礎開發,ado.net開發

編輯:C#入門知識

ADO.NET基礎開發,ado.net開發


ADO.NET是微軟新一代.NET數據庫的訪問架構,ADO是ActiveX Data Objects的縮寫。ADO.NET是數據庫應用程序和數據源之間溝通的橋梁,主要提供了一個面向對象的數據訪問架構,用來開發數據庫應用程序。

ADO.NET主要包括Connection、Command、DataReader、DataSet和DataAdapter對象。詳細介紹如下:

  對象名稱 說明 Connection 主要提供與數據庫的連接功能 Command 用於返回數據、修改數據、運行存儲過程以及發送或檢索參數信息的數據庫命令 DataReader 通過Command對象提供從數據庫檢索信息的功能。以一種只讀的、向前的、快速的方式訪問數據庫 DataSet 支持ADO.NET斷開式、分布式數據方案的核心對象。是一個數據庫容器,可以看作是內存中的數據庫 DataAdapter

提供連接DataSet對象和數據源的橋梁,DataAdapter對象使用Command對象在數據源中執行SQL命令,

以便將數據加載到DataSet中,並確保DataSet中數據的更改與數據源保持一致。

 

1.使用Connection連接數據庫

在打開數據庫建立連接之前,必須先設置好連接字符串(ConnectionString)

1.直接定義在字符串中

  string Connstr = "Data Source=.;Initial Catalog=MyTest;User ID=sa;Password=12345";

2.存放在應用程序的配置文件(App.Config)中(實際開發的時候一般采用這種,......)

 <connectionStrings>
     <add name="dbConnStr" connectionString="Data Source=.;Initial Catalog=MyTest;User ID=sa;Password=12345"/>
  </connectionStrings>

在後台代碼裡進行讀取:

 string Connstr = ConfigurationManager.ConnectionStrings["dbConnStr"].ConnectionString;

其中的參數說明如下:

DataSource為數據源,值為要連接的SQL Server實例的名稱或網絡地址(.表示本機的網絡地址)

Initial Catalog為初始目錄,值為數據庫的名稱

User ID為用戶ID,值為SQL Server登陸賬戶

Password為密碼,值為SQL Server賬戶登錄的密碼

Connect Timeout為連接超時設定,其值表示在終止嘗試並產生錯誤之前,等待與服務器的連接的時間長度(以秒為單位)

Integrated Security此參數決定是否是安全連接。可能的取值有True,False,SSPI(SSPI是True的同義詞)

前4個(DataSource,Initial Catalog,User ID,Password)是連接到SQL Server的連接字符串的必有項。

設置好連接字符串之後就可以使用SqlConnection對象來連接數據庫了。調用SqlConnection對象的Open或Close方法可以打開或關閉數據庫連接,必須注意必要時再打開數據庫連接並盡早關閉。

e.g:

               SqlConnection conn = new SqlConnection(Connstr);
                conn.Open();
                if (conn.State==ConnectionState.Open)
                {
                    MessageBox.Show("SQL Server數據庫連接開啟");
                    conn.Close();
                }
                if(conn.State==ConnectionState.Closed)
                {
                    MessageBox.Show("SQL Server數據庫連接關閉");
                }

2.使用Command對象操作數據

  屬性 說明 CommandType 獲取或設置Command對象要執行命令的類型 CommandText 獲取或設置要對數據庫執行的SQL語句或存儲過程名或表名 CommandTimeOut 獲取或設置在終止對執行命令的嘗試並生成錯誤之前的等待時間 Connection 獲取或設置此Command對象使用的Connection對象的名稱 Parameters 獲取Command對象需要使用的參數集合

創建Command對象必須指定3個屬性(Connection,CommandType,CommandText):

Connection屬性:SqlCommand是對象執行命令操作的對象,它本身無法建立與數據庫的連接,只能通過SqlConnection對象來建立連接。

CommandType和CommandText屬性:CommandText既可以是SQL語句,也可以是存儲過程,還可以是表的名字。要使用不同種類的CommandText,只需要設置相應的CommandType即可。

        CommandType.Text:CommandType的默認值,表示執行的是SQL語句,為CommandText指定SQL字符串。

        CommandType.StoredProcedure:指示執行的是存儲過程,需要為CommandText指定一個儲存過程的名稱。

        CommandType.TableDirect:指示用戶將得到這個表中的所有數據,為CommandText指定一個數據表名稱(不過還是建議直接寫SQL來實現這個功能)。

e.g:

    示例1:  

      using(SqlCommand cmd = new SqlCommand())//創建命令對象SqlCommand
                {
                    cmd.Connection = conn;//設置連接對象
                    cmd.CommandType = CommandType.Text;//設置Command對象執行語句的類型
                    cmd.CommandText = "Insert into Tbl_Students values ('aaa',20,'football');";//設置執行的語句
                    MessageBox.Show(cmd.ExecuteNonQuery().ToString());//ExecuteNonQuery返回執行SQL語句,受影響的行數
                }

      示例2:

        using(SqlCommand cmd = new SqlCommand("Insert into Tbl_Students values ('aaa',20,'football');",conn))
                {
                    MessageBox.Show(cmd.ExecuteNonQuery().ToString());
                }

       示例3:

        using (SqlCommand cmd = conn.CreateCommand())
                {
                    cmd.CommandText = "Delete from Tbl_Students where Name='aaa';";
                    MessageBox.Show(cmd.ExecuteNonQuery().ToString());
                }

 

在執行Command操作時,有3種方法可用:

ExecuteNonQuery:用於非SELECT命令,比如INSERT,DELETE,UPDATE命令,返回命令所影響的數據的行數。也可以用ExecuteNonQuery來執行一些數據定義命令,比如新建、更新、刪除數據庫對象(如表、索引等)

ExecuteScalar:用於執行SELECT查詢命令,返回數據中第一行第一列的值。通常用來執行那些用到COUNT或SUM函數的SELECT命令

ExecuteReader:執行SELECT命令,並返回一個DataReader對象。

這3個方法非常重要,如果要使用ADO.NET完成某種數據庫操作,一定會用到這些方法,它們沒有優劣之分,只是使用的場合不同。

使用Command對象來具體的添加、修改、刪除數據就不舉例說明了。

3.使用DataReader對象讀取數據

在對數據庫中的數據進行查詢顯示操作時,就可以使用DataReader對象來實現。當Command對象返回結果集時,需要使用DataReader對象來檢索數據。DataReader對象返回一個來自Command的只讀的、只能向前的數據流。

DataReader對象是一個簡單的數據集,用於從數據源中讀取只讀的數據集,並常用於檢索大量數據。DataReader每次只能在內存中保留一行,開銷非常小。但在讀取數據時,必須一直保持與數據庫的連接(連線模式)。它是一個輕量級的數據對象,如果只需將數據讀出並顯示,那麼它是最合適的工具,它的讀取速度比DataSet(後面會講到)對象要快,占用的資源也比DataSet少。

常用屬性:

HasRows:判斷DataReader對象中是否還有數據

FieldCount:獲取當前行的列數

RecordsAffected:獲取執行SQL語句所更改、添加或刪除的行數

常用方法:

Read:使DataReader對象前進到下一條數據

Close:關閉DataReader對象

Get:用來讀取數據集當前行的某一列的數據

e.g:

              using (SqlDataReader reader = cmd.ExecuteReader())
                    {
                        if (reader.HasRows)
                        {
                            while (reader.Read())
                            {
                                MessageBox.Show(reader.GetString(1));
                            }
                        }
                    }

通過SqlCommand對象的ExecuteReader方法從數據源中檢索數據來創建SqlDataReader對象。還得注意在讀取完數據後,務必把DataReader對象關閉,否則當DataReader對象尚未關閉時,DataReader所使用的Connection對象就無法執行其他操作了。比較好的做法就是把這些全部放在using語句裡面,讓其自動完成關閉以及對象的回收工作,不必再讓我們來操心了。

e.g:

 1       using (SqlConnection conn = new SqlConnection(Connstr))
 2             {
 3                 conn.Open();
 4                 using (SqlCommand cmd = conn.CreateCommand())
 5                 {
 6                     cmd.CommandText = "select * from Tbl_Students;";
 7                     using (SqlDataReader reader = cmd.ExecuteReader())
 8                     {
 9                         if (reader.HasRows)
10                         {
11                             while (reader.Read())
12                             {
13                                 MessageBox.Show(reader.GetString(1));
14                             }
15                         }
16                     }
17 
18                 }
19             }

 

4.使用DataSet和DataAdapter查詢數據

      DataSet可以看作是在內存中創建的一個小型關系數據庫,它將數據庫中的數據復制了一份放到用戶本地(客戶端)的內存中,供用戶在不連接數據庫的情況下讀取數據,充分利用了客戶端資源,大大降低了數據庫服務器的壓力。它是ADO.NET最核心成員之一,它是支持ADO.NET斷開式、分布式數據方案的核心對象,也是非連接的數據查詢的核心組件。

      DataAdapter對象(數據適配器)是一種用來充當DataSet對象與實際數據源之間橋梁的對象,只要有DataSet的地方就有它,專門為DataSet服務的。它的工作方式一般有兩種:一種是通過Command對象執行SQL語句從數據源中檢索數據,將獲取的結果集填充到DataSet對象的表中;另一種是把用戶對DataSet對象作出的更改寫入到數據源中。

 

 1       using (SqlConnection conn = new SqlConnection(Connstr))
 2             {
 3                 conn.Open();
 4                 using (SqlCommand cmd = conn.CreateCommand())
 5                 {
 6                     //DataSet離線數據集
 7                     cmd.CommandText = "select * from Tbl_Students where Age<30;";
 8                     DataSet dataset = new DataSet();
 9                     SqlDataAdapter adapter = new SqlDataAdapter(cmd);
10                     adapter.Fill(dataset);
11                     ShowDsTable(dataset.Tables[0]);
12                     for (int i = 0; i <=dataset.Tables[0].Rows.Count-1; i++)
13                     {
14                         dataset.Tables[0].Rows[i]["Name"] += i.ToString();
15                     }
16                     SqlCommandBuilder builder = new SqlCommandBuilder(adapter);
17                     adapter.Update(dataset);
18                     ShowDsTable(dataset.Tables[0]);
19                 }
20             }
21         }
22 
23         private void ShowDsTable(DataTable dataTable)
24         {
25             foreach (DataRow row in dataTable.Rows)
26             {
27                 string name = (string)row["Name"];
28                 int age = (int)row["Age"];
29                 MessageBox.Show("Name:" + name + ",Age:" + age.ToString());
30             }
31         }

SqlCommandBuilder對象用於自動生成表單命令,將對DataSet所做的更改與關聯的SQL Server數據庫更改相協調。

最後還有一個就是可以通過SqlCommand.Parameters屬性的參數傳值防止SQL語句注入式攻擊。

e.g:

    普通的SQL語句:select * from Tbl_Students where Name='czh';

    簡單的SQL注入式攻擊:select * from Tbl_Students where Name='czh' or '1'='1';

改成    cmd.CommandText = "select * from Tbl_Students where Name=@Name;";
          cmd.Parameters.AddWithValue("@Name", "czh");

就行啦。

關於ADO.NET基礎的一些技術就是這些了,在C#裡面連接SQL Server數據庫主要就是SqlConnection、SqlCommand、SqlDataReader、DataSet以及SqlDataAdapter這幾個類,需要重點掌握。實際開發中必須注意,必要時再打開數據庫連接並盡早關閉,比較好的使將操作放在using語句裡面,進行資源的自動釋放。。。

 

後記:將近一個月沒有更博了,也確實是太忙了,現在是大二下,幾乎都是滿課,實驗還挺多的。前段時間還在做兼職,然後果斷辭掉了,作為搞技術的,現在還是抓緊時間學技術為好,把一些時間抽去做兼職不僅賺不到多少錢,還把自己寶貴的時間給浪費了,累得不行不行的,真有點得不償失的感覺。以後還是多更博,踏實學技術吧。大二下,時間也不太多了,技術渣渣的,課也是滿滿的,加油吧,哎!

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved