欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

ADO.NET數(shù)據(jù)庫訪問技術(shù)

 更新時間:2015年07月22日 11:21:18   作者:Web_凳子君  
本篇文章主要介紹了ADO.NET數(shù)據(jù)庫訪問技術(shù)以及在線或離線訪問數(shù)據(jù)庫的實現(xiàn)步驟,有需要的朋友可以參考下

一. ADO.NET的定義


ADO.NET來源于COM組件庫ADO(即ActiveX Data Objects),是微軟公司新一代.NET數(shù)據(jù)庫的訪問模型,是目前數(shù)據(jù)庫程序設(shè)計人員用來開發(fā)基于.NET的數(shù)據(jù)庫應(yīng)用程序的主要接口。它利用.NET Data Provider(數(shù)據(jù)提供程序)進行數(shù)據(jù)庫的連接和訪問,通過ADO.NET數(shù)據(jù)庫程序能夠使用各種對象來訪問符合條件的數(shù)據(jù)庫內(nèi)容,讓提供數(shù)據(jù)庫管理系統(tǒng)的各個廠商可以根據(jù)此標(biāo)準(zhǔn)開放對應(yīng)的.NET Data Provider,這樣設(shè)計數(shù)據(jù)庫應(yīng)用程序人員不必了解各類數(shù)據(jù)庫底層運作的細節(jié),只要掌握ADO.NET所提供對象的模型,便可訪問所有支持.NET Data Provider的數(shù)據(jù)庫。

ADO.NET結(jié)構(gòu)模型如下所示:

 圖1. ADO.NET結(jié)構(gòu)模型

  ADO.NET是一個類庫,這些類提供了很多的對象,可用于完成數(shù)據(jù)庫連接和增刪查改等操作。其中包括如下五個對象: 1)Connection:用來連接數(shù)據(jù)庫(SQL Server使用的是SqlConnection對象); 2)Command:用來對數(shù)據(jù)庫執(zhí)行SQL命令,如增刪查改等操作; 3)DataReader:用來從數(shù)據(jù)庫中返回只讀數(shù)據(jù),用數(shù)據(jù)源填充DataSet對象; 4)DataAdapter:與DataSet對象相結(jié)合使用,實現(xiàn)對數(shù)據(jù)庫的控制; 5)DataSet:可看作離線時內(nèi)存中的數(shù)據(jù)庫; 這五個對象提供了兩種讀取數(shù)據(jù)庫的方式; 第一種方式:使用Connection、Command、DataReader,其權(quán)限只能讀取或查詢數(shù)據(jù)庫; 第二種方式:使用Connection、Command、DataAdapter、DataSet,其權(quán)限能進行各種數(shù)據(jù)庫的操作。 ADO.NET讀取數(shù)據(jù)庫操作示意圖: 

圖1. ADO.NET結(jié)構(gòu)模型

 
二. 使用ADO.NET在線訪問數(shù)據(jù)庫的步驟(這里用的是SQL Server 數(shù)據(jù)庫)
 
1. 連接數(shù)據(jù)庫
直接上一段代碼:

using System.Data.SqlClient;
string source = "server=(local); integrated security=SSPI; database=myDateabase;User ID=sa;pwd=sa"; 
SqlConnection conn = new SqlConnection(source); 
conn.Open(); 
// 對數(shù)據(jù)庫數(shù)據(jù)進行操作 
conn.Close();


  (1). 首先添加命名空間System.Data.SqlClient;

(2). 定義數(shù)據(jù)庫連接字符串:

第一種方法:直接把數(shù)據(jù)庫連接字符串存放在字符串對象中,如上代碼所示;

第二種方法Web:將數(shù)據(jù)庫連接信息存放在web.config配置文件中,然后通過使用ConfigurationStringSettings類進行調(diào)用。來個例子說明一下:

(a). 首先,在web.config配置文件的部分定義數(shù)據(jù)庫連接信息:

<configuration>
<connectionStrings>
<add name="myDatabase" connectionString="server=(local); integrated security=SSPI; database=myDateabase;User ID=sa;pwd=sa" providerName="System.Data.SqlClient" />
</connectionStrings>
</configuration>


(b). 在項目文件中,添加對Configuration的引用,在頭部添加using System.Configuration。然后定義數(shù)據(jù)庫連接字符串為:

復(fù)制代碼 代碼如下:
string connstring = ConfigurationManager.ConnectionStrings["myDatabase"].ConnectionString;


備注:必須添加對System.Configuration程序集的引用,才能解析上述代碼中使用的ConfigurationManager類。

2. 創(chuàng)建數(shù)據(jù)庫連接
1)創(chuàng)建Connection對象:

string conn = new SqlConnection(connString); 

2)打開數(shù)據(jù)庫: conn.Open(); 一般情況下,當(dāng)在.NET中使用“稀缺”的資源時,如數(shù)據(jù)庫連接、窗口或圖形對象,最好確保每個資源在使用完畢后立即關(guān)閉。盡管.NET的設(shè)計人員實現(xiàn)了自動垃圾收集機制,垃圾最終會被回收,但仍需要盡可能早地釋放資源,以避免出現(xiàn)資源匱乏的情況。 當(dāng)編寫訪問數(shù)據(jù)庫的代碼時,因為使連接打開的時間略長于需要的時間,就可能影響其他會話。在極端的情況下,不關(guān)閉連接可能會使其他用戶無法進入一整組數(shù)據(jù)表,極大地降低應(yīng)用程序的性能。主要有兩種方式可以確保數(shù)據(jù)庫連接等類似的“稀缺”資源在使用完后立即釋放。這兩種方式如下: (1)第一種方式:采用try...catch...finally語句塊 確保在finally中關(guān)閉任何已打開的連接。

try { 
// open the connection 
conn.Open(); 
// 對數(shù)據(jù)庫數(shù)據(jù)進行操作 
} catch (SqlException ex) { 
// log the exception 
} finally { 
conn.Close(); 
}


在給定的方法中可能會打開許多資源,這樣try...catch...finally塊的層次有時候不容易看清。還有一種方式可以確保資源的關(guān)閉——using語句。 (2)使用using語句塊

using(SqlConnection conn = new SqlConnection(connstring)){ 
// Open the connection 
conn.Open(); 
// 對數(shù)據(jù)庫數(shù)據(jù)進行操作 
}


無論塊是如何退出的,using子句都會確保關(guān)閉數(shù)據(jù)庫連接。 

 
3. 創(chuàng)建數(shù)據(jù)庫操作命令:


Connection對象與數(shù)據(jù)源建立連接后,使用Command對象對數(shù)據(jù)源執(zhí)行查詢、插入、修改和刪除等操作。

(1) 創(chuàng)建SQL數(shù)據(jù)庫操作命令: sqlQuery查詢語句具體規(guī)則請詳見我的系列文章:【讀書筆記】SQL Server查詢語句_鄧智容 (2) 創(chuàng)建Command對象:

(a). 方法一:

復(fù)制代碼 代碼如下:
SqlCommand command = new SqlCommand(); command.Connection = conn; command.CommandText = "SQL語句";

(b). 方法二:

SqlCommand command = new SqlCommand("SQL語句", conn); 

備注: 1). SQL查詢語句若含有C#程序的變量并以字符串形式連接,則應(yīng)注意數(shù)據(jù)為非數(shù)字的變量應(yīng)用單引號括起來; 2). 在SQL查詢語句中使用參數(shù)化查詢語句的話,譬如:

command.CommandText = "SELECT * FROM myTable WHERE siteName=@siteName"; 

當(dāng)需要給該參數(shù)賦值時,可以使用Command對象建立參數(shù)對象,然后再賦值:

復(fù)制代碼 代碼如下:
command.Parameters.Add(new SqlParameter(@siteName, siteName)); command.Parameters["@siteName"].Value = "http://#";

備注: 在.Net Framework 2.0中SqlClient增加了AddWithValue(string parameterName, object value)方法。該方法簡化了調(diào)用儲存過程的輸入?yún)?shù)過程,在運行時對所輸入的數(shù)據(jù)類型進行判斷,獲取對應(yīng)的數(shù)據(jù)庫類型。 因此該方法在運行效率上比用 Add(string parameterName, SqlDbType sqlDbType, int size, string sourceColumn)方法要低。 在效率要求較高的地方仍然建議使用Add()方法,其它場合可以使用AddWithValue()簡化代碼編寫量。

 
4. 執(zhí)行sqlQuery命令:


定義好命令后,就需要執(zhí)行它。執(zhí)行的語句有多種方式,這取決于要從命令中返回什么數(shù)據(jù)。Command類提供了下述可執(zhí)行的命令: (1) ExecuteNonQuery() —— 執(zhí)行命令,但不返回任何結(jié)果。一般用于UPDATE、INSERT或DELETE語句中,其中唯一的返回值是受影響的記錄個數(shù)。但如果調(diào)用帶有輸出參數(shù)的存儲過程,該方法就有返回值。 (2) ExecuteReader() —— 執(zhí)行命令,返回一個類型化的IDataReader。是從數(shù)據(jù)源中選擇某些數(shù)據(jù)的最簡單快捷的方法。 (3) ExecuteScalar() —— 執(zhí)行命令,返回結(jié)果集中的第一行第一列的值。

 
5. 對數(shù)據(jù)庫操作完畢后關(guān)閉數(shù)據(jù)庫連接:


conn.Close();

 
三. 離線數(shù)據(jù)庫訪問


DataAdapter對象主要在Connection對象和DataSet對象之間執(zhí)行數(shù)據(jù)的傳輸工作,將數(shù)據(jù)填充到DataSet對象中,也可把DataSet對象更新后的數(shù)據(jù)返回到數(shù)據(jù)源中,也可架構(gòu)在Command對象上,通過CommandBuilding對象生成DataAdapter的Insert、Update和Delete等SQL操作命令。使用DataSet和DataTable對象訪問數(shù)據(jù)源后,ADO.NET會自動離線,在內(nèi)存中處理數(shù)據(jù),如有修改數(shù)據(jù)的操作,將自動重新連接數(shù)據(jù)源,更新數(shù)據(jù)庫。DataSet對象、DataAdapter對象與數(shù)據(jù)源之間的關(guān)系如下:

DataSet <---> DataAdapter <---> 數(shù)據(jù)源
下面是使用DataAdapter進行離線數(shù)據(jù)庫訪問的操作步驟:

1. 創(chuàng)建DataAdapter、DataTable對象(使用的是SQL Server數(shù)據(jù)庫)

復(fù)制代碼 代碼如下:
SqlAdapter da = new SqlAdapter("sqlQuery查詢語句", conn); DataSet = ds = new DataSet(); DataTable dt = new DataTable();

2. 將數(shù)據(jù)填充到DataTable對象

da.Fill(ds, "TableName"); dt = ds.Tables["TableName"]; 

3. 對DataTable中的數(shù)據(jù)進行處理 TataTable對象的屬性和方法有: 

名稱 屬性/方法 說明
Rows.Add() 方法 插入新數(shù)據(jù)行
Rows[n].Delete() 方法 刪除第n行的記錄
Rows.Count 屬性 獲取行數(shù)
Rows[i]["ColumnName"] 屬性 獲取第i行、列名為ColumnName的值
Rows[i][j] 屬性 獲取第i行、第j列的值
 
  還有一種數(shù)據(jù)查詢技術(shù):LINQ。下回再討論。

通過以上對ADO.NET數(shù)據(jù)庫訪問技術(shù)的介紹,希望對大家有所幫助。

相關(guān)文章

  • SQL的各種連接Join案例詳解

    SQL的各種連接Join案例詳解

    SQL JOIN 子句用于把來自兩個或多個表的行結(jié)合起來,基于這些表之間的共同字段,下面就為大家分享一下
    2020-09-09
  • influxdb數(shù)據(jù)庫常用命令及SpringBoot整合

    influxdb數(shù)據(jù)庫常用命令及SpringBoot整合

    這篇文章主要介紹了influxdb數(shù)據(jù)庫常用命令及SpringBoot整合,Influxdb是一個開源的分布式時序、時間和指標(biāo)數(shù)據(jù)庫,使用go語言編寫,無需外部依賴,需要的朋友可以參考下
    2023-07-07
  • MySQL與Oracle差異比較之二 基本語法

    MySQL與Oracle差異比較之二 基本語法

    這篇文章主要介紹了MySQL與Oracle差異比較之二 基本語法,需要的朋友可以參考下
    2017-04-04
  • 如何利用SQL語句創(chuàng)建數(shù)據(jù)庫詳解

    如何利用SQL語句創(chuàng)建數(shù)據(jù)庫詳解

    數(shù)據(jù)庫就是一個文件系統(tǒng),訪問數(shù)據(jù)的時候需要通過標(biāo)準(zhǔn)的SQL語言來完成,下面這篇文章主要給大家介紹了關(guān)于如何利用SQL語句創(chuàng)建數(shù)據(jù)庫的相關(guān)資料,需要的朋友可以參考下
    2022-06-06
  • Hive?HQL支持2種查詢語句風(fēng)格

    Hive?HQL支持2種查詢語句風(fēng)格

    這篇文章主要為大家介紹了Hive?HQL支持2種查詢語句風(fēng)格示例語法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06
  • navicat刪除oracle表的操作方法

    navicat刪除oracle表的操作方法

    在本篇文章中我們給大家分享一篇關(guān)于navicat怎么刪除oracle表的相關(guān)內(nèi)容,有需要的朋友們跟著學(xué)習(xí)下。
    2019-08-08
  • navicat如何執(zhí)行.sql文件

    navicat如何執(zhí)行.sql文件

    這篇文章主要介紹了navicat如何執(zhí)行.sql文件問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • sql 中將日期中分秒化為零的語句

    sql 中將日期中分秒化為零的語句

    用到了sql中的convert函數(shù)將日期中的分秒轉(zhuǎn)換為零
    2008-10-10
  • 關(guān)于hive表的存儲格式ORC格式的使用詳解

    關(guān)于hive表的存儲格式ORC格式的使用詳解

    這篇文章主要介紹了關(guān)于hive表的存儲格式ORC格式的使用詳解,Hive?是基于?Hadoop?的一個數(shù)據(jù)倉庫工具,可以將結(jié)構(gòu)化的數(shù)據(jù)文件映射為一張表,并提供類SQL查詢功能,需要的朋友可以參考下
    2023-07-07
  • 數(shù)據(jù)庫的ACID特性術(shù)語詳解

    數(shù)據(jù)庫的ACID特性術(shù)語詳解

    這篇文章主要介紹了數(shù)據(jù)庫的ACID特性術(shù)語詳解,ACID就是:原子性(Atomicity )、一致性( Consistency )、隔離性( Isolation)和持久性(Durabilily),本文分別解釋了它們,需要的朋友可以參考下
    2015-02-02

最新評論