一、ado.net简介
ado.net(activex data objects for.net)是一组类库,专门用于在.net 环境中进行数据访问。它支持多种数据源,例如 sql server、oracle、mysql 等,为开发者提供了统一的数据访问接口,极大地简化了数据访问的流程。
(一)核心组件
connection:负责建立与数据源的连接,如sqlconnection用于连接 sql server 数据库。不同的数据源对应不同的connection实现类。
command:可执行 sql 命令或存储过程,像sqlcommand就用于执行针对 sql server 数据库的命令。通过它,开发者能够实现数据的查询、插入、更新和删除等操作。
datareader:以只读、只进的方式高效读取数据源中的数据,例如sqldatareader从 sql server 数据库读取数据。它适用于需要快速读取大量数据且不需要对数据进行复杂操作的场景。
dataadapter:在数据源和dataset之间充当桥梁,用于数据的填充和更新。比如sqldataadapter可以从 sql server 数据库中获取数据并填充到dataset中,也能将dataset中的数据更新回数据库。
dataset:它是一个内存中的数据缓存,类似于一个小型的数据库,可存储多个datatable以及它们之间的关系。dataset允许开发者在断开与数据源连接的情况下对数据进行操作,提高了应用程序的灵活性和性能。
二、使用ado.net访问数据的步骤
(一)连接数据库
首先要建立与数据库的连接,以下是连接 sql server 数据库的示例代码:
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("数据库连接成功!"); // 在这里进行后续的数据操作 } catch (sqlexception ex) { console.writeline("数据库连接错误: " + ex.message); } }
在上述代码中,connectionstring包含了连接数据库所需的服务器地址、数据库名称、用户名和密码等信息。使用using语句可以确保sqlconnection对象在使用完毕后正确释放资源。
(二)执行 sql 命令
查询数据:使用sqlcommand类执行 sql 查询语句,并通过sqldatareader读取数据。
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对象根据该语句和已建立的连接来执行查询。executereader方法返回一个sqldatareader对象,通过while循环可以逐行读取查询结果。
插入数据:插入数据同样使用sqlcommand对象,但需要使用executenonquery方法,该方法返回受影响的行数。
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 + " 行数据已插入。"); }
更新数据:更新数据的操作与插入数据类似,只需修改 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 + " 行数据已更新。"); }
删除数据:删除数据也是通过sqlcommand和executenonquery方法实现。
string deletequery = "delete from employees where employeename = 'john doe'"; using (sqlcommand deletecommand = new sqlcommand(deletequery, connection)) { int rowsaffected = deletecommand.executenonquery(); console.writeline(rowsaffected + " 行数据已删除。"); }
(三)使用 dataadapter 和 dataset
dataadapter和dataset提供了离线数据访问的能力,以下是一个示例:
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根据查询语句从数据库中获取数据,并填充到dataset中。dataset中的数据可以在离线状态下进行操作,操作完成后再通过dataadapter将更改更新回数据库。
三、异常处理
在进行数据库操作时,异常处理至关重要,以确保应用程序的稳定性。通常使用try-catch-finally结构来处理异常。
try { // 数据库操作代码 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("数据库错误: " + ex.message); } finally { // 这里可以添加释放资源的代码,如关闭连接等 }
在try块中放置数据库操作代码,catch块捕获并处理可能出现的sqlexception异常,finally块用于执行无论是否发生异常都需要执行的代码,例如关闭数据库连接。
通过以上内容,你已经对 c# 使用ado.net访问数据有了全面的了解。在实际开发中,你可以根据具体需求灵活运用这些知识,构建出高效、稳定的数据访问功能。
到此这篇关于c#通过ado.net访问数据的方法详解的文章就介绍到这了,更多相关c# ado.net访问数据内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论