国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

ADO.NET快速起步 [特別推薦]

2024-07-10 13:03:36
字體:
來源:轉載
供稿:網友
導 讀:本文主要介紹了ado.net的基本特點,并且使用的一些代碼展示了在ado.net中如何建立數據庫連接,發送查詢命令及使用datareader對象快速瀏覽數據集方式。
--------------------------------------------------------------------------------
翻譯整理:.net技術網(www.51dotnet.com)郜飛 小獅子
英文版 :http://www.itpeople.com.cn/tech/tech-news.asp?fatherid=137&newsid=31148&classtype=152

ado.net是微軟的microsoft activex data objects (ado)的下一代產品,是在微軟的.net中創建分布式和數據共享應用程序的應用程序開發接口(api)。

ado.net能被用在任何用戶的應用程序,需要和ole db-compliant的數據源連接和通訊,例如microsoft sql server。

同時ado.net又保持著與以前的ado模型有關的一些主要概念,它已經被極大的完善,并從不同的信息來源提供途徑去獲得結構化的數據----一個平臺文本文件,從數據庫管理系統獲得的相關數據,或者是分級的xml數據----然而,所有都按照一個相容的,標準化的設計模型來執行。

這篇文章意在簡要的介紹ado.net的關鍵特性,重點講述了在關系數據庫管理系統(rdbms)中訪問數據。

快速瀏覽

sql server 7.0(及更新版本)以及可以通過 ole db 提供者進行訪問的任何數據源。這些又稱為被管理的提供者(managed provider)。.net框架的數據存取api提供了兩種方式分別識別并處理兩種類型的數據源:sql server 7.0(及更新版本)和可以通過 ole db 提供者進行訪問的任何數據源。sql(system.data.sql)庫可以直接聯結到sql server的數據,而ado (system.data.ado)庫可用于其他通過ole db 提供者進行訪問的任何數據源。

sql server被管理的提供者在ms sql server 7.0或以后的版本中使用叫做“tabulardata stream”的專用協議,而沒有使用ole db, ado 或 odbc。

ado.net被管理的提供者能夠在這些ole db 提供者下工作。

驅動程序 driver
提供者 provider

sqloledb
sql ole db provider

msdaora
oracle ole db provider

jolt
jet ole db provider

msdasql/sqlserver odbc
sql server odbc driver via ole db for odbc provider

msdasql/jet odbc
jet odbc driver via ole db provider for odbc provider


現在ado.net還不支持 msdasql/oracle odbc driver(oracle ole db driver for odbc)。

以下章節將介紹每個被管理的提供者都可用的ado.net的核心組件

connections--連接和管理數據庫事務。
commands--向數據庫發送的命令。
datareaders--直接讀取流數據。
datesets 和 datesetcommands--對駐留內存中的數據進行存儲和操作。


核心的ado.net功能基本上可以被概括為如下內容:

connection對象在web頁面和數據庫間建立連接。commands對象向數據庫提供者發出命令,返回的結果以一種流的方式貫穿于這些連接中。結果集可以用datareaders快速的讀取,也可以儲存到駐留內存的datesets對象中,然后通過datesetcommands對象讓用戶在數據集中訪問和操作記錄。開發者可以用過dateset內置的方法在基礎的數據源上去處理數據集。

為了使用.net框架中的被管理提供者,需要把下面的名空間(namespaces)包括到.aspx頁面中。

sql被管理的提供者:

<%@ import namespace="system.data.sql" %>


 


ado被管理的提供者:

<%@ import namespace="system.data.ado" %>


 


connections

微軟在.net框架中提供了兩個connection對象以建立連接到特定的數據庫:sqlconnection和 adoconnection。connection對象能在已經創建的連接上通過調用open的方法來被明確的打開連接。下面的代碼片斷演示了用任一提供者創建和打開連接。

sqlconnection

[c#]
string connectionstring = "server=localhost; uid=sa; pwd=; database=northwind";
sqlconnection myconn = new sqlconnection(connectionstring);
myconn.open();

[vb]
dim connectionstring as string = _
 m connectionstring as string = _
   "server=localhost; uid=sa; pwd=; database=northwind"
dim myconn as sqlconnection = new sqlconnection(connectionstring)
myconn.open



adoconnection

[c#]
string connectionstring = "provider=sqloledb.1; data source=localhost; uid=sa; pwd=; initial catalog=northwind;"
adoconnection myconn = new adoconnection(connectionstring);
myconn.open();

[vb]
dim connectionstring as string = _
 ost; uid=sa; pwd=; initial catalog=northwind;"
adoconnection myconn = new adoconnection(connectionstring);
myconn.open();

[vb]
dim connectionstring as string = _
   "provider=sqloledb.1; data source=localhost; " & _
   "uid=sa; pwd=; initial catalog=nohwind"
dim myconn as adoconnection = new adoconnection(connectionstring)
myconn.open()



commands


在建立了連接以后,下一步要做的就是對數據庫運行的sql語句。最簡單直接的方法是通過ado和sql命令對象來實現。

command對象可以給予提供者一些該如何操作數據庫信息的指令。

一個命令(command)可以用典型的sql語句來表達,包括執行選擇查詢(select query)來返回記錄集,執行行動查詢(action query)來 更新(增加、編輯或刪除)數據庫的記錄,或者創建并修改數據庫的表結構。當然命令(command)也可以傳遞參數并返回值。

commands可以被明確的界定,或者調用數據庫中的存儲過程。接下來的小段代碼證明了在建立連接之后如何去發出一個select命令。

sqlcommand

[c#]
string sqlstmt = " select * from customers";
sqlcommand mycommand = new sqlcommand(sqlstmt, myconn);

[vb]
dim sqlstmt as string = "select * from customers"
dim mycommand as sqlcommand = new sqlcommand(sqlstmt, myconn)



adocommand

[c#]
string sqlstmt = " select * from customers";
adocommand mycommand = new adocommand(sqlstmt, myconn);

[vb]
dim sqlstmt as string = "select * from customers"
dim mycommand as adocommand = new adocommand(sqlstmt, myconn)


datareaders

當你處理大量數據的時候,大量內存的占用會導致性能上的問題。例如,一個連接(connection)用傳統的ado recordset對象去讀1000行數據庫的記錄,就必須為這1000行記錄將內存分配給這個連接直至這個連接的生命周期結束。如果有1000用戶在同一時間對同一計算機進行同樣的操作,內存被過度的使用就會成為關鍵性的問題。

為了解決這些問題,.net框架包括了datareaders對象,而這個對象僅僅從數據庫返回一個只讀的,僅向前數據流。而且當前內存中每次僅存在一條記錄。

datareader接口支持各種數據源,比如關系數據和分級數據。datareader可以適用于在運行完一條命令僅需要返回一個簡單的只讀記錄集。

下面的代碼片斷闡述了怎么樣聲明變量指向一個datareader對象的實例,還包括代碼執行時command對象產生的結果。當調用command對象執行方法時,command對象必須已經被創建和作為參數來傳遞。繼續上面的例子:

sqldatareader

[c#]
sqldatareader myreader = null;
mycommand.execute(out myreader);

[vb]
dim myreader as sqldatareader = nothing
mycommand.execute(myreader)



adodatareader

[c#]
adodatareader myreader = null;
mycommand.execute(out myreader);

[vb]
dim myreader as adodatareader = nothing
mycommand.execute(myreader)



接下來這步是一個使用datareader的簡單格式

[c#]
while (myreader.read()) {
 [c#]
while (myreader.read()) {
   // do your thing with the current row here
}

[vb]
while myreader.read
 ' do your thing with the current row here
end while


下面的例子展示了迄今為止我們所討論的內容:建立一個到sql數據源的連接,對于連接的發送select命令,用datareader對象來保存返回的結果,然后通過循環datareader取得數據。

下面是用c#寫的完整代碼。

<%@ import namespace="system.data" %>
<%@ import namespace="system.data.sql" %>

<html>
<head>

<script language="c#" runat="server">
public sqldatareader myreader;
public string html;

protected void page_load(object src, eventargs e ) {
   sqlconnection mysqlconnection = new sqlconnection("server=localhost;uid=sa;pwd=;database=northwind");
   sqlcommand mysqlcommand = new sqlcommand("select * from customers", mysqlconnection);

   try {
      mysqlconnection.open();
      mysqlcommd.execute(out myreader);

 .execute(out myreader);

      html="<table>";
      html+="<tr>";
      html+="<td><b>customer id</b>   </td>";
      html+="<td><b>company name</b></td>";
      html+="</tr>";

      while (myreader.read()) {
         html+="<tr>";
         html+="<td + myreader["customerid"].tostring() + "</td>";
 + myreader["customerid"].tostring() + "</td>";
         html+="<td>" + myreader["companyname"].tostring() + "</td>";
         html+="</tr>";
      }
      html+="</table>";
   }
   catch(exception e) {
      html=e.tostring();
   }
   finall y {
      meader.close();
 ader.close();
      mysqlconnection.close();
   }
   response.write(html);
}
</script>
</head>

<body>

</body>
</htm


注意,真正的捕獲塊已經包括在"try ... catch"語句中了。這提供了一些處理連接時出現異常的方法。在“finally”塊中的代碼總是會被執行,不管是否已經執行的是“try”或“catch”塊,所以它變成關閉reader和conncetion對象的邏輯位置。

同時也注意datareader中字段的值是怎么被方便的訪問和傳遞的。  



總結:本文主要介紹了ado.net的基本特點,并且使用的一些代碼展示了在ado.net中如何建立數據庫連接,發送查詢命令及使用datareader對象快速瀏覽數據集方式。當然作為微軟面向分布式應用和數據共享的新一代ado產品,它正真的精華是datesets對象。為此,本網站將在即將推出的《ado.net深入研究》中對datesets對象進行深入的探討。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 铅山县| 肥乡县| 行唐县| 平邑县| 璧山县| 神池县| 梅河口市| 宁远县| 延长县| 射阳县| 深圳市| 神农架林区| 垫江县| 平阴县| 山西省| 景宁| 潢川县| 西昌市| 隆子县| 商水县| 景洪市| 襄垣县| 沭阳县| 乐昌市| 永胜县| 浙江省| 米林县| 正安县| 玉林市| 高雄县| 汾阳市| 定结县| 廉江市| 横峰县| 柏乡县| 泾阳县| 库尔勒市| 寿阳县| 利辛县| 遂平县| 石棉县|