ADO.NET中的五個(gè)主要對(duì)象的詳細(xì)介紹與應(yī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)建連接對(duì)象,出了using范圍,連接自動(dòng)關(guān)閉,對(duì)象自動(dòng)銷(xiāo)毀
{
conn.Open();//打開(kāi)連接
using (SqlCommand cmd = conn.CreateCommand()) //創(chuàng)建命令對(duì)象
{
cmd.CommandText = "select * from T_Persons";//命令內(nèi)容
DataSet dataset = new DataSet(); //創(chuàng)建一個(gè)數(shù)據(jù)集,相當(dāng)于一個(gè)數(shù)據(jù)容器
SqlDataAdapter adapter = new SqlDataAdapter(cmd); //創(chuàng)建一個(gè)適配器
adapter.Fill(dataset); //將查詢(xún)結(jié)果填充到數(shù)據(jù)集中
DataTable datatable = dataset.Tables[0]; //將查詢(xún)到的一張表保存在DataTable對(duì)象中
for (int i = 0; i < datatable.Rows.Count;i++ )//遍歷
{
DataRow row = datatable.Rows[i];//取得一行對(duì)象
string name=row["F_Name"].ToString();//取得該行對(duì)應(yīng)列的值
MessageBox.Show(name);
}
}
}
對(duì)象解析
Connection:
和數(shù)據(jù)庫(kù)交互,必須連接它。連接幫助指明數(shù)據(jù)庫(kù)服務(wù)器、數(shù)據(jù)庫(kù)名字、用戶(hù)名、密碼,和連接數(shù)據(jù)庫(kù)所需要的其它參數(shù)。Connection對(duì)象會(huì)被Command對(duì)象使用,這樣就能夠知道是在哪個(gè)數(shù)據(jù)源上面執(zhí)行命令。
Command:
主要可以用來(lái)對(duì)數(shù)據(jù)庫(kù)發(fā)出一些指令,例如可以對(duì)數(shù)據(jù)庫(kù)下達(dá)查詢(xún)、新增、修改、刪除數(shù)據(jù)等指令,以及呼叫存在數(shù)據(jù)庫(kù)中的預(yù)存程序等。這個(gè)對(duì)象是架構(gòu)在Connection 對(duì)象上,也就是Command 對(duì)象是透過(guò)連結(jié)到數(shù)據(jù)源。
DataAdapter:
主要是在數(shù)據(jù)源以及DataSet 之間執(zhí)行數(shù)據(jù)傳輸?shù)墓ぷ鳎梢酝高^(guò)Command 對(duì)象下達(dá)命令后,并將取得的數(shù)據(jù)放入DataSet 對(duì)象中。這個(gè)對(duì)象是架構(gòu)在Command對(duì)象上,并提供了許多配合DataSet 使用的功能。
DataSet:
這個(gè)對(duì)象可以視為一個(gè)暫存區(qū)(Cache),可以把從數(shù)據(jù)庫(kù)中所查詢(xún)到的數(shù)據(jù)保留起來(lái),甚至可以將整個(gè)數(shù)據(jù)庫(kù)顯示出來(lái)。DataSet 的能力不只是可以?xún)?chǔ)存多個(gè)Table 而已,還可以透過(guò)DataAdapter對(duì)象取得一些例如主鍵等的數(shù)據(jù)表結(jié)構(gòu),并可以記錄數(shù)據(jù)表間的關(guān)聯(lián)。DataSet 對(duì)象可以說(shuō)是ADO.NET 中重量級(jí)的對(duì)象,這個(gè)對(duì)象架構(gòu)在DataAdapter對(duì)象上,本身不具備和數(shù)據(jù)源溝通的能力;也就是說(shuō)我們是將DataAdapter對(duì)象當(dāng)做DataSet 對(duì)象以及數(shù)據(jù)源間傳輸數(shù)據(jù)的橋梁。
DataReader:
當(dāng)我們只需要循序的讀取數(shù)據(jù)而不需要其它操作時(shí),可以使用DataReader 對(duì)象。DataReader對(duì)象只是一次一筆向下循序的讀取數(shù)據(jù)源中的數(shù)據(jù),而且這些數(shù)據(jù)是只讀的,并不允許作其它的操作。因?yàn)镈ataReader 在讀取數(shù)據(jù)的時(shí)候限制了每次只讀取一筆,而且只能只讀,所以使用起來(lái)不但節(jié)省資源而且效率很好。使用DataReader 對(duì)象除了效率較好之外,因?yàn)椴挥冒褦?shù)據(jù)全部傳回,故可以降低網(wǎng)絡(luò)的負(fù)載。ADO.NET 使用Connection 對(duì)象來(lái)連接數(shù)據(jù)庫(kù),使用Command 或DataAdapter對(duì)象來(lái)執(zhí)行SQL語(yǔ)句,并將執(zhí)行的結(jié)果返回給DataReader 或 DataAdapter ,然后再使用取得的DataReader 或DataAdapter 對(duì)象操作數(shù)據(jù)結(jié)果。
強(qiáng)類(lèi)型 DataSet(ADO.NET中的重頭戲)
使用方法:在項(xiàng)目上右擊-添加-新建項(xiàng)-數(shù)據(jù)集,然后將表從服務(wù)器資源管理器拖放到DataSet中。注意拖放過(guò)程是自動(dòng)根據(jù)表結(jié)構(gòu)生成強(qiáng)類(lèi)型DataSet等類(lèi),沒(méi)有把數(shù)據(jù)托過(guò)來(lái),程序還是連得那個(gè)數(shù)據(jù)庫(kù),自動(dòng)將數(shù)據(jù)庫(kù)連接字符串寫(xiě)在了配置文件中。
定義表的時(shí)候必須要有主鍵(表名:T_Persons)
T_PersonsTableAdapter adapter = new T_PersonsTableAdapter();//首先生成一個(gè)適配器
DataSet演示.DataSet1.T_PersonsDataTable datatable = adapter.GetData();//講返回結(jié)果用T_PersonsDataTable類(lèi)型接收
for (int i = 0; i < datatable.Count;i++ )//遍歷表中的每一行
{
DataSet演示.DataSet1.T_PersonsRow row = datatable[i];//每一行放入一個(gè)T_PersonsRow中
MessageBox.Show("姓名是:"+row.F_Name+"年齡是:"+row.F_Age);//取出數(shù)據(jù)(像使用屬性一樣)
}
強(qiáng)類(lèi)型DataSet的更新
T_PersonsTableAdapter adapter = new T_PersonsTableAdapter();
DataSet演示.DataSet1.T_PersonsDataTable datatable = adapter.GetData();//取出查詢(xún)結(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ù)庫(kù)中的表未增加字段:右鍵數(shù)據(jù)集→配置
增加字段:右鍵數(shù)據(jù)集→配置→查詢(xún)分析器
插入新行:
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ù)庫(kù)中的該字段對(duì)應(yīng)的值是否為空(這是一個(gè)方法,直接調(diào)用)
{
MessageBox.Show("數(shù)據(jù)為空");
}
強(qiáng)類(lèi)型DataSet添加自定義SQL語(yǔ)句
右鍵數(shù)據(jù)集→添加→Query
查詢(xún)SQL語(yǔ)句
SELECT * FROM dbo.T_Persons
where F_Age>20
調(diào)用該方法:
T_PersonsTableAdapter adapter = new T_PersonsTableAdapter();
DataSet演示.DataSet1.T_PersonsDataTable datatable = adapter.GetDataOlder();
查詢(xún)SQL語(yǔ)句(帶參數(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語(yǔ)句(帶參數(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)化強(qiáng)類(lèi)型DataSet批量處理
(1)插入3000條數(shù)據(jù)未優(yōu)化用時(shí)
Stopwatch sw = new Stopwatch();
sw.Start();//打開(kāi)時(shí)鐘
T_testTableAdapter adapter = new T_testTableAdapter();
for(int i=0;i<3000;i++)//計(jì)算插入3000條數(shù)據(jù)的用時(shí)
{
adapter.Insert(i.ToString(), i);
}
sw.Stop();
MessageBox.Show(sw.Elapsed.ToString());
(2)插入3000條數(shù)據(jù)優(yōu)化后用時(shí)
Stopwatch sw = new Stopwatch();
sw.Start();//打開(kāi)時(shí)鐘
T_testTableAdapter adapter = new T_testTableAdapter();
adapter.Connection.Open();//打開(kāi)連接
for(int i=0;i<3000;i++)//計(jì)算插入3000條數(shù)據(jù)的用時(shí)
{
adapter.Insert(i.ToString(), i);
}
adapter.Connection.Close();//關(guān)閉連接
sw.Stop();
MessageBox.Show(sw.Elapsed.ToString());
相關(guān)文章
Asp.net 文件上傳類(lèi)(取得文件后綴名,保存文件,加入文字水印)
Asp.net 取得文件后綴名,保存文件,加入文字水印的代碼類(lèi)2008-11-11
關(guān)于利用RabbitMQ實(shí)現(xiàn)延遲任務(wù)的方法詳解
最近在使用RabbitMQ來(lái)實(shí)現(xiàn)延遲任務(wù)的時(shí)候發(fā)現(xiàn),這其中的知識(shí)點(diǎn)還是挺多的,所以下面這篇文章主要給大家介紹了關(guān)于利用RabbitMQ實(shí)現(xiàn)延遲任務(wù)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下。2017-12-12
MVC使用T4模板生成其他類(lèi)的具體實(shí)現(xiàn)學(xué)習(xí)筆記2
這篇文章主要為大家詳細(xì)介紹了MVC使用T4模板生成其他類(lèi)的具體實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-09-09
asp.net SharpZipLib的壓縮與解壓?jiǎn)栴}
關(guān)于SharpZipLib的壓縮與解壓縮的實(shí)現(xiàn)代碼,網(wǎng)絡(luò)上有一堆,千遍一律,連注釋也一模一樣,一模一樣的文章拷來(lái)拷去??2009-11-11
asp.net開(kāi)發(fā)微信派發(fā)現(xiàn)金紅包/H5網(wǎng)頁(yè)搶紅包功能(思路詳解)
這篇文章主要介紹了asp.net開(kāi)發(fā)微信派發(fā)現(xiàn)金紅包/H5網(wǎng)頁(yè)搶紅包功能,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03
asp.net listbox實(shí)現(xiàn)單選全選取消
這篇文章主要介紹了asp.net listbox單選全選取消的應(yīng)用,需要的朋友可以參考下2014-02-02
MVC+EasyUI+三層新聞網(wǎng)站建立 建站準(zhǔn)備工作(一)
這篇文章主要為大家詳細(xì)介紹了MVC+EasyUI+三層新聞網(wǎng)站建立的第一篇,建站的準(zhǔn)備工作,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07
asp.net 更改gridview pageSize的方法
asp.net 更改gridview pageSize的方法,需要的朋友可以參考下。2011-07-07

