ADO.NET中的五個主要對象


配置文件
<configuration>
  <connectionStrings>
    <add name=connStr" connectionString="Data Source=.\SQLEXPRESS;AttachDBFilename=|DataDirectory|\SS.mdf;Integrated Security=true;User Instance=True"/>
  </connectionStrings>
</configuration>
代碼
 1             string strconn = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString;  //從配置文件中讀取連接字符串
 2             using (SqlConnection conn = new SqlConnection(strconn)) //創建連接對象,出了using范圍,連接自動關閉,對象自動銷毀
 3             {
 4                 conn.Open();//打開連接
 5                 using (SqlCommand cmd = conn.CreateCommand()) //創建命令對象
 6                 {
 7                     cmd.CommandText = "select * from T_Persons";//命令內容
 8                     DataSet dataset = new DataSet();  //創建一個數據集,相當於一個數據容器
 9                     SqlDataAdapter adapter = new SqlDataAdapter(cmd); //創建一個適配器
10                     adapter.Fill(dataset);  //將查詢結果填充到數據集中
11                     DataTable datatable = dataset.Tables[0];  //將查詢到的一張表保存在DataTable對象中
12                     for (int i = 0; i < datatable.Rows.Count;i++ )//遍歷
13                     {
14                         DataRow row = datatable.Rows[i];//取得一行對象
15                         string name=row["F_Name"].ToString();//取得該行對應列的值
16                         MessageBox.Show(name);
17                     }
18                 }
19             }
對象解析
Connection:

和數據庫交互,必須連接它。連接幫助指明數據庫服務器、數據庫名字、用戶名、密碼,和連接數據庫所需要的其它參數。Connection對象會被Command對象使用,這樣就能夠知道是在哪個數據源上面執行命令。

 Command:

主要可以用來對數據庫發出一些指令,例如可以對數據庫下達查詢、新增、修改、刪除數據等指令,以及呼叫存在數據庫中的預存程序等。這個對象是架構在Connection 對象上,也就是Command 對象是透過連結到數據源。

 DataAdapter:

主要是在數據源以及DataSet 之間執行數據傳輸的工作,它可以透過Command 對象下達命令后,並將取得的數據放入DataSet 對象中。這個對象是架構在Command對象上,並提供了許多配合DataSet 使用的功能。

 DataSet:

這個對象可以視為一個暫存區(Cache),可以把從數據庫中所查詢到的數據保留起來,甚至可以將整個數據庫顯示出來。DataSet 的能力不只是可以儲存多個Table 而已,還可以透過DataAdapter對象取得一些例如主鍵等的數據表結構,並可以記錄數據表間的關聯。DataSet 對象可以說是ADO.NET 中重量級的對象,這個對象架構在DataAdapter對象上,本身不具備和數據源溝通的能力;也就是說我們是將DataAdapter對象當做DataSet 對象以及數據源間傳輸數據的橋梁。


DataReader:

當我們只需要循序的讀取數據而不需要其它操作時,可以使用DataReader 對象。DataReader對象只是一次一筆向下循序的讀取數據源中的數據,而且這些數據是只讀的,並不允許作其它的操作。因為DataReader 在讀取數據的時候限制了每次只讀取一筆,而且只能只讀,所以使用起來不但節省資源而且效率很好。使用DataReader 對象除了效率較好之外,因為不用把數據全部傳回,故可以降低網絡的負載。ADO.NET 使用Connection 對象來連接數據庫,使用Command 或DataAdapter對象來執行SQL語句,並將執行的結果返回給DataReader 或 DataAdapter ,然后再使用取得的DataReader 或DataAdapter 對象操作數據結果。
強類型 DataSet(ADO.NET中的重頭戲)

使用方法:在項目上右擊-添加-新建項-數據集,然后將表從服務器資源管理器拖放到DataSet中。注意拖放過程是自動根據表結構生成強類型DataSet等類,沒有把數據托過來,程序還是連得那個數據庫,自動將數據庫連接字符串寫在了配置文件中。

定義表的時候必須要有主鍵(表名:T_Persons)

           T_PersonsTableAdapter adapter = new T_PersonsTableAdapter();//首先生成一個適配器
            DataSet演示.DataSet1.T_PersonsDataTable datatable = adapter.GetData();//講返回結果用T_PersonsDataTable類型接收
            for (int i = 0; i < datatable.Count;i++ )//遍歷表中的每一行
            {
                DataSet演示.DataSet1.T_PersonsRow row = datatable[i];//每一行放入一個T_PersonsRow中
                MessageBox.Show("姓名是:"+row.F_Name+"年齡是:"+row.F_Age);//取出數據(像使用屬性一樣)
            }
強類型DataSet的更新
 1             T_PersonsTableAdapter adapter = new T_PersonsTableAdapter();
 2             DataSet演示.DataSet1.T_PersonsDataTable datatable = adapter.GetData();//取出查詢結果放入表中
 3             DataSet演示.DataSet1.T_PersonsRow row = datatable[0];//取表的第一行
 4             row.F_Name = "newName";//修改第一行數據的名字字段
 5             int i = adapter.Update(datatable);
 6             if (i > 0)
 7             {
 8                 MessageBox.Show("修改成功");
 9             }
10             else
11             {
12                 MessageBox.Show("修改失敗");
13             }

數據庫中的表未增加字段:右鍵數據集→配置

增加字段:右鍵數據集→配置→查詢分析器

插入新行
 1            T_PersonsTableAdapter adapter = new T_PersonsTableAdapter();
 2             int i = adapter.Insert("吉思靜", 22);
 3             if (i > 0)
 4             {
 5                 MessageBox.Show("插入成功");
 6             }
 7             else
 8             {
 9                 MessageBox.Show("插入失敗");
10             }
空值處理
                if(row.IsF_NameNull())//判斷數據庫中的該字段對應的值是否為空(這是一個方法,直接調用)
                {
                    MessageBox.Show("數據為空");
                }
強類型DataSet添加自定義SQL語句
右鍵數據集→添加→Query
查詢SQL語句
SELECT * FROM dbo.T_Persons
where F_Age>20
調用該方法:
            T_PersonsTableAdapter adapter = new T_PersonsTableAdapter();
            DataSet演示.DataSet1.T_PersonsDataTable datatable = adapter.GetDataOlder();
查詢SQL語句(帶參數)
SELECT * FROM dbo.T_Persons
where F_Age>@Age
調用該方法:
            T_PersonsTableAdapter adapter = new T_PersonsTableAdapter();
            DataSet演示.DataSet1.T_PersonsDataTable datatable = adapter.GetDataByAge(20);
刪除SQL語句(帶參數)
DELETE FROM T_Persons
WHERE (F_Name = @Name)
調用該方法:
            T_PersonsTableAdapter adapter = new T_PersonsTableAdapter();
            int i = adapter.DeleteByName("李正興");//成功刪除返回1否則返回0
優化強類型DataSet批量處理

(1)插入3000條數據未優化用時

            Stopwatch sw = new Stopwatch();
            sw.Start();//打開時鍾
            T_testTableAdapter adapter = new T_testTableAdapter();
            for(int i=0;i<3000;i++)//計算插入3000條數據的用時
            {
                adapter.Insert(i.ToString(), i);
            }
            sw.Stop();
            MessageBox.Show(sw.Elapsed.ToString());

(2)插入3000條數據優化后用時

            Stopwatch sw = new Stopwatch();
            sw.Start();//打開時鍾
            T_testTableAdapter adapter = new T_testTableAdapter();
            adapter.Connection.Open();//打開連接
            for(int i=0;i<3000;i++)//計算插入3000條數據的用時
            {
                adapter.Insert(i.ToString(), i);
            }
            adapter.Connection.Close();//關閉連接
            sw.Stop();
            MessageBox.Show(sw.Elapsed.ToString());

 

作者: 李正興     英文名: black_li
出處: http://www.cnblogs.com/longteng1991/
如果,您喜歡這篇文章的話,您可以分享給您的好友,請點擊按鈕 【推薦】
如果,您想更快的閱讀我的最新文章,您可以關注我,請點擊按鈕 【關注】
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM