C#通過ADO.NET訪問數(shù)據(jù)的方法詳解
一、ADO.NET簡介
ADO.NET(ActiveX Data Objects for.NET)是一組類庫,專門用于在.NET 環(huán)境中進(jìn)行數(shù)據(jù)訪問。它支持多種數(shù)據(jù)源,例如 SQL Server、Oracle、MySQL 等,為開發(fā)者提供了統(tǒng)一的數(shù)據(jù)訪問接口,極大地簡化了數(shù)據(jù)訪問的流程。
(一)核心組件
Connection:負(fù)責(zé)建立與數(shù)據(jù)源的連接,如SqlConnection用于連接 SQL Server 數(shù)據(jù)庫。不同的數(shù)據(jù)源對應(yīng)不同的Connection實(shí)現(xiàn)類。
Command:可執(zhí)行 SQL 命令或存儲過程,像SqlCommand就用于執(zhí)行針對 SQL Server 數(shù)據(jù)庫的命令。通過它,開發(fā)者能夠?qū)崿F(xiàn)數(shù)據(jù)的查詢、插入、更新和刪除等操作。
DataReader:以只讀、只進(jìn)的方式高效讀取數(shù)據(jù)源中的數(shù)據(jù),例如SqlDataReader從 SQL Server 數(shù)據(jù)庫讀取數(shù)據(jù)。它適用于需要快速讀取大量數(shù)據(jù)且不需要對數(shù)據(jù)進(jìn)行復(fù)雜操作的場景。
DataAdapter:在數(shù)據(jù)源和DataSet之間充當(dāng)橋梁,用于數(shù)據(jù)的填充和更新。比如SqlDataAdapter可以從 SQL Server 數(shù)據(jù)庫中獲取數(shù)據(jù)并填充到DataSet中,也能將DataSet中的數(shù)據(jù)更新回數(shù)據(jù)庫。
DataSet:它是一個內(nèi)存中的數(shù)據(jù)緩存,類似于一個小型的數(shù)據(jù)庫,可存儲多個DataTable以及它們之間的關(guān)系。DataSet允許開發(fā)者在斷開與數(shù)據(jù)源連接的情況下對數(shù)據(jù)進(jìn)行操作,提高了應(yīng)用程序的靈活性和性能。
二、使用ADO.NET訪問數(shù)據(jù)的步驟
(一)連接數(shù)據(jù)庫
首先要建立與數(shù)據(jù)庫的連接,以下是連接 SQL Server 數(shù)據(jù)庫的示例代碼:
string connectionString = "server=your_server;database=your_database;user id=your_user;password=your_password;"; using (SqlConnection connection = new SqlConnection(connectionString)) { try { connection.Open(); Console.WriteLine("數(shù)據(jù)庫連接成功!"); // 在這里進(jìn)行后續(xù)的數(shù)據(jù)操作 } catch (SqlException ex) { Console.WriteLine("數(shù)據(jù)庫連接錯誤: " + ex.Message); } }
在上述代碼中,connectionString包含了連接數(shù)據(jù)庫所需的服務(wù)器地址、數(shù)據(jù)庫名稱、用戶名和密碼等信息。使用using語句可以確保SqlConnection對象在使用完畢后正確釋放資源。
(二)執(zhí)行 SQL 命令
查詢數(shù)據(jù):使用SqlCommand類執(zhí)行 SQL 查詢語句,并通過SqlDataReader讀取數(shù)據(jù)。
string query = "select * from Employees"; using (SqlCommand command = new SqlCommand(query, connection)) { SqlDataReader reader = command.ExecuteReader(); while (reader.Read()) { Console.WriteLine(reader["EmployeeName"].ToString()); } reader.Close(); }
這段代碼中,query是 SQL 查詢語句,SqlCommand對象根據(jù)該語句和已建立的連接來執(zhí)行查詢。ExecuteReader方法返回一個SqlDataReader對象,通過while循環(huán)可以逐行讀取查詢結(jié)果。
插入數(shù)據(jù):插入數(shù)據(jù)同樣使用SqlCommand對象,但需要使用ExecuteNonQuery方法,該方法返回受影響的行數(shù)。
string insertQuery = "insert into Employees (EmployeeName, Department) values ('John Doe', 'HR')"; using (SqlCommand insertCommand = new SqlCommand(insertQuery, connection)) { int rowsAffected = insertCommand.ExecuteNonQuery(); Console.WriteLine(rowsAffected + " 行數(shù)據(jù)已插入。"); }
更新數(shù)據(jù):更新數(shù)據(jù)的操作與插入數(shù)據(jù)類似,只需修改 SQL 語句。
string updateQuery = "update Employees set Department = 'IT' where EmployeeName = 'John Doe'"; using (SqlCommand updateCommand = new SqlCommand(updateQuery, connection)) { int rowsAffected = updateCommand.ExecuteNonQuery(); Console.WriteLine(rowsAffected + " 行數(shù)據(jù)已更新。"); }
刪除數(shù)據(jù):刪除數(shù)據(jù)也是通過SqlCommand和ExecuteNonQuery方法實(shí)現(xiàn)。
string deleteQuery = "delete from Employees where EmployeeName = 'John Doe'"; using (SqlCommand deleteCommand = new SqlCommand(deleteQuery, connection)) { int rowsAffected = deleteCommand.ExecuteNonQuery(); Console.WriteLine(rowsAffected + " 行數(shù)據(jù)已刪除。"); }
(三)使用 DataAdapter 和 DataSet
DataAdapter和DataSet提供了離線數(shù)據(jù)訪問的能力,以下是一個示例:
string selectQuery = "select * from Employees"; using (SqlDataAdapter adapter = new SqlDataAdapter(selectQuery, connection)) { DataSet dataset = new DataSet(); adapter.Fill(dataset, "Employees"); DataTable table = dataset.Tables["Employees"]; foreach (DataRow row in table.Rows) { Console.WriteLine(row["EmployeeName"].ToString()); }
在這個示例中,SqlDataAdapter根據(jù)查詢語句從數(shù)據(jù)庫中獲取數(shù)據(jù),并填充到DataSet中。DataSet中的數(shù)據(jù)可以在離線狀態(tài)下進(jìn)行操作,操作完成后再通過DataAdapter將更改更新回數(shù)據(jù)庫。
三、異常處理
在進(jìn)行數(shù)據(jù)庫操作時,異常處理至關(guān)重要,以確保應(yīng)用程序的穩(wěn)定性。通常使用try-catch-finally結(jié)構(gòu)來處理異常。
try { // 數(shù)據(jù)庫操作代碼 string connectionString = "server=your_server;database=your_database;user id=your_user;password=your_password;"; using (SqlConnection connection = new SqlConnection(connectionString)) { connection.Open(); string query = "select * from Employees"; using (SqlCommand command = new SqlCommand(query, connection)) { SqlDataReader reader = command.ExecuteReader(); while (reader.Read()) { Console.WriteLine(reader["EmployeeName"].ToString()); } reader.Close(); } } } catch (SqlException ex) { Console.WriteLine("數(shù)據(jù)庫錯誤: " + ex.Message); } finally { // 這里可以添加釋放資源的代碼,如關(guān)閉連接等 }
在try塊中放置數(shù)據(jù)庫操作代碼,catch塊捕獲并處理可能出現(xiàn)的SqlException異常,finally塊用于執(zhí)行無論是否發(fā)生異常都需要執(zhí)行的代碼,例如關(guān)閉數(shù)據(jù)庫連接。
通過以上內(nèi)容,你已經(jīng)對 C# 使用ADO.NET訪問數(shù)據(jù)有了全面的了解。在實(shí)際開發(fā)中,你可以根據(jù)具體需求靈活運(yùn)用這些知識,構(gòu)建出高效、穩(wěn)定的數(shù)據(jù)訪問功能。
到此這篇關(guān)于C#通過ADO.NET訪問數(shù)據(jù)的方法詳解的文章就介紹到這了,更多相關(guān)C# ADO.NET訪問數(shù)據(jù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C#設(shè)計模式之Strategy策略模式解決007大破密碼危機(jī)問題示例
這篇文章主要介紹了C#設(shè)計模式之Strategy策略模式解決007大破密碼危機(jī)問題,簡單描述了策略模式的定義并結(jié)合加密解密算法實(shí)例分析了C#策略模式的具體使用方法,需要的朋友可以參考下2017-09-09Unity Shader實(shí)現(xiàn)3D翻頁效果
這篇文章主要為大家詳細(xì)介紹了Unity Shader實(shí)現(xiàn)3D翻頁效果,Plane實(shí)現(xiàn)翻頁效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-07-07.Net WInform開發(fā)筆記(二)Winform程序運(yùn)行結(jié)構(gòu)圖及TCP協(xié)議在Winform中的應(yīng)用
中午沒事,把去年剛畢業(yè)那會畫的幾張圖翻出來了,大概介紹Winform應(yīng)用程序運(yùn)行的過程,以及TCP協(xié)議在Winform中的應(yīng)用。感興趣的朋友可以了解下;如果有Windows消息機(jī)制等基礎(chǔ),很好理解這兩張2013-01-01C#數(shù)據(jù)結(jié)構(gòu)與算法揭秘三 鏈表
這節(jié)我們討論鏈表的基本操作,并且畫圖以證明,下屆中我們將討論雙向鏈表,環(huán)形鏈表 應(yīng)用舉例2012-11-11