C#通過ADO.NET訪問數(shù)據(jù)的方法詳解
一、ADO.NET簡介
ADO.NET(ActiveX Data Objects for.NET)是一組類庫,專門用于在.NET 環(huán)境中進行數(shù)據(jù)訪問。它支持多種數(shù)據(jù)源,例如 SQL Server、Oracle、MySQL 等,為開發(fā)者提供了統(tǒng)一的數(shù)據(jù)訪問接口,極大地簡化了數(shù)據(jù)訪問的流程。
(一)核心組件
Connection:負責建立與數(shù)據(jù)源的連接,如SqlConnection用于連接 SQL Server 數(shù)據(jù)庫。不同的數(shù)據(jù)源對應(yīng)不同的Connection實現(xiàn)類。
Command:可執(zhí)行 SQL 命令或存儲過程,像SqlCommand就用于執(zhí)行針對 SQL Server 數(shù)據(jù)庫的命令。通過它,開發(fā)者能夠?qū)崿F(xiàn)數(shù)據(jù)的查詢、插入、更新和刪除等操作。
DataReader:以只讀、只進的方式高效讀取數(shù)據(jù)源中的數(shù)據(jù),例如SqlDataReader從 SQL Server 數(shù)據(jù)庫讀取數(shù)據(jù)。它適用于需要快速讀取大量數(shù)據(jù)且不需要對數(shù)據(jù)進行復(fù)雜操作的場景。
DataAdapter:在數(shù)據(jù)源和DataSet之間充當橋梁,用于數(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ù)進行操作,提高了應(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ù)庫連接成功!");
// 在這里進行后續(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方法實現(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)下進行操作,操作完成后再通過DataAdapter將更改更新回數(shù)據(jù)庫。
三、異常處理
在進行數(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ù)有了全面的了解。在實際開發(fā)中,你可以根據(jù)具體需求靈活運用這些知識,構(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)文章希望大家以后多多支持腳本之家!

