主頁 > 知識庫 > ADO.NET中的五個主要對象的詳細介紹與應用

ADO.NET中的五個主要對象的詳細介紹與應用

熱門標簽:Linux服務器 電子圍欄 團購網(wǎng)站 銀行業(yè)務 Mysql連接數(shù)設置 服務器配置 科大訊飛語音識別系統(tǒng) 阿里云
首先看一個例子
配置文件
復制代碼 代碼如下:

configuration>
connectionStrings>
add name=connStr" connectionString="Data Source=.\SQLEXPRESS;AttachDBFilename=|DataDirectory|\SS.mdf;Integrated Security=true;User Instance=True"/>
/connectionStrings>
/configuration>

代碼
復制代碼 代碼如下:

string strconn = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString; //從配置文件中讀取連接字符串
using (SqlConnection conn = new SqlConnection(strconn)) //創(chuàng)建連接對象,出了using范圍,連接自動關(guān)閉,對象自動銷毀
{
conn.Open();//打開連接
using (SqlCommand cmd = conn.CreateCommand()) //創(chuàng)建命令對象
{
cmd.CommandText = "select * from T_Persons";//命令內(nèi)容
DataSet dataset = new DataSet(); //創(chuàng)建一個數(shù)據(jù)集,相當于一個數(shù)據(jù)容器
SqlDataAdapter adapter = new SqlDataAdapter(cmd); //創(chuàng)建一個適配器
adapter.Fill(dataset); //將查詢結(jié)果填充到數(shù)據(jù)集中
DataTable datatable = dataset.Tables[0]; //將查詢到的一張表保存在DataTable對象中
for (int i = 0; i datatable.Rows.Count;i++ )//遍歷
{
DataRow row = datatable.Rows[i];//取得一行對象
string name=row["F_Name"].ToString();//取得該行對應列的值
MessageBox.Show(name);
}
}
}

對象解析
復制代碼 代碼如下:

Connection:
和數(shù)據(jù)庫交互,必須連接它。連接幫助指明數(shù)據(jù)庫服務器、數(shù)據(jù)庫名字、用戶名、密碼,和連接數(shù)據(jù)庫所需要的其它參數(shù)。Connection對象會被Command對象使用,這樣就能夠知道是在哪個數(shù)據(jù)源上面執(zhí)行命令。
Command:
主要可以用來對數(shù)據(jù)庫發(fā)出一些指令,例如可以對數(shù)據(jù)庫下達查詢、新增、修改、刪除數(shù)據(jù)等指令,以及呼叫存在數(shù)據(jù)庫中的預存程序等。這個對象是架構(gòu)在Connection 對象上,也就是Command 對象是透過連結(jié)到數(shù)據(jù)源。
DataAdapter:
主要是在數(shù)據(jù)源以及DataSet 之間執(zhí)行數(shù)據(jù)傳輸?shù)墓ぷ?,它可以透過Command 對象下達命令后,并將取得的數(shù)據(jù)放入DataSet 對象中。這個對象是架構(gòu)在Command對象上,并提供了許多配合DataSet 使用的功能。
DataSet:
這個對象可以視為一個暫存區(qū)(Cache),可以把從數(shù)據(jù)庫中所查詢到的數(shù)據(jù)保留起來,甚至可以將整個數(shù)據(jù)庫顯示出來。DataSet 的能力不只是可以儲存多個Table 而已,還可以透過DataAdapter對象取得一些例如主鍵等的數(shù)據(jù)表結(jié)構(gòu),并可以記錄數(shù)據(jù)表間的關(guān)聯(lián)。DataSet 對象可以說是ADO.NET 中重量級的對象,這個對象架構(gòu)在DataAdapter對象上,本身不具備和數(shù)據(jù)源溝通的能力;也就是說我們是將DataAdapter對象當做DataSet 對象以及數(shù)據(jù)源間傳輸數(shù)據(jù)的橋梁。
DataReader:
當我們只需要循序的讀取數(shù)據(jù)而不需要其它操作時,可以使用DataReader 對象。DataReader對象只是一次一筆向下循序的讀取數(shù)據(jù)源中的數(shù)據(jù),而且這些數(shù)據(jù)是只讀的,并不允許作其它的操作。因為DataReader 在讀取數(shù)據(jù)的時候限制了每次只讀取一筆,而且只能只讀,所以使用起來不但節(jié)省資源而且效率很好。使用DataReader 對象除了效率較好之外,因為不用把數(shù)據(jù)全部傳回,故可以降低網(wǎng)絡的負載。ADO.NET 使用Connection 對象來連接數(shù)據(jù)庫,使用Command 或DataAdapter對象來執(zhí)行SQL語句,并將執(zhí)行的結(jié)果返回給DataReader 或 DataAdapter ,然后再使用取得的DataReader 或DataAdapter 對象操作數(shù)據(jù)結(jié)果。

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

定義表的時候必須要有主鍵(表名:T_Persons)
復制代碼 代碼如下:

T_PersonsTableAdapter adapter = new T_PersonsTableAdapter();//首先生成一個適配器
DataSet演示.DataSet1.T_PersonsDataTable datatable = adapter.GetData();//講返回結(jié)果用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);//取出數(shù)據(jù)(像使用屬性一樣)
}

強類型DataSet的更新
復制代碼 代碼如下:

T_PersonsTableAdapter adapter = new T_PersonsTableAdapter();
DataSet演示.DataSet1.T_PersonsDataTable datatable = adapter.GetData();//取出查詢結(jié)果放入表中
DataSet演示.DataSet1.T_PersonsRow row = datatable[0];//取表的第一行
row.F_Name = "newName";//修改第一行數(shù)據(jù)的名字字段
int i = adapter.Update(datatable);
if (i > 0)
{
MessageBox.Show("修改成功");
}
else
{
MessageBox.Show("修改失敗");
}

數(shù)據(jù)庫中的表未增加字段:右鍵數(shù)據(jù)集→配置
增加字段:右鍵數(shù)據(jù)集→配置→查詢分析器
插入新行
復制代碼 代碼如下:

T_PersonsTableAdapter adapter = new T_PersonsTableAdapter();
int i = adapter.Insert("吉思靜", 22);
if (i > 0)
{
MessageBox.Show("插入成功");
}
else
{
MessageBox.Show("插入失敗");
}

空值處理
復制代碼 代碼如下:

if(row.IsF_NameNull())//判斷數(shù)據(jù)庫中的該字段對應的值是否為空(這是一個方法,直接調(diào)用)
{
MessageBox.Show("數(shù)據(jù)為空");
}

強類型DataSet添加自定義SQL語句
復制代碼 代碼如下:

右鍵數(shù)據(jù)集→添加→Query
查詢SQL語句
SELECT * FROM dbo.T_Persons
where F_Age>20
調(diào)用該方法:
T_PersonsTableAdapter adapter = new T_PersonsTableAdapter();
DataSet演示.DataSet1.T_PersonsDataTable datatable = adapter.GetDataOlder();
查詢SQL語句(帶參數(shù))
SELECT * FROM dbo.T_Persons
where F_Age>@Age
調(diào)用該方法:
T_PersonsTableAdapter adapter = new T_PersonsTableAdapter();
DataSet演示.DataSet1.T_PersonsDataTable datatable = adapter.GetDataByAge(20);
刪除SQL語句(帶參數(shù))
DELETE FROM T_Persons
WHERE (F_Name = @Name)
調(diào)用該方法:
T_PersonsTableAdapter adapter = new T_PersonsTableAdapter();
int i = adapter.DeleteByName("李正興");//成功刪除返回1否則返回0

優(yōu)化強類型DataSet批量處理
(1)插入3000條數(shù)據(jù)未優(yōu)化用時
復制代碼 代碼如下:

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

(2)插入3000條數(shù)據(jù)優(yōu)化后用時
復制代碼 代碼如下:

Stopwatch sw = new Stopwatch();
sw.Start();//打開時鐘
T_testTableAdapter adapter = new T_testTableAdapter();
adapter.Connection.Open();//打開連接
for(int i=0;i3000;i++)//計算插入3000條數(shù)據(jù)的用時
{
adapter.Insert(i.ToString(), i);
}
adapter.Connection.Close();//關(guān)閉連接
sw.Stop();
MessageBox.Show(sw.Elapsed.ToString());
您可能感興趣的文章:
  • ADO.NET EF中的實體修改方法
  • ADO.NET 連接數(shù)據(jù)庫字符串小結(jié)(Oracle、SqlServer、Access、ODBC)
  • ADO.NET實體數(shù)據(jù)模型詳細介紹
  • ADO.Net 類型化DataSet的簡單介紹
  • ADO.NET之連接池技術(shù)的使用詳解
  • ASP.NET中實現(xiàn)把Json數(shù)據(jù)轉(zhuǎn)換為ADO.NET DataSet對象
  • ADO.NET編程之基礎知識
  • ADO.NET基礎知識匯總

標簽:萍鄉(xiāng) 蚌埠 衢州 棗莊 廣元 江蘇 大理 衡水

巨人網(wǎng)絡通訊聲明:本文標題《ADO.NET中的五個主要對象的詳細介紹與應用》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266