ADO.NET实用经验汇总攻略
什么是ADO.NET
ADO.NET是微软面向Web应用程序开发的一组数据访问服务,旨在为数据库访问提供优化的集合类,包括连接管理、命令执行、数据读取、数据适配等一系列功能,使得Web应用程序在处理关系型数据时更加高效和灵活。
ADO.NET的应用场景
ADO.NET适用于对关系型数据库进行数据操作的场景,如用户账户管理、订单交易记录、商品库存管理等系统的后台数据处理。它可用于创建ADO.NET连接、使用SQL查询和更新语句、查询并返回数据集,并支持通过基于.NET的编程语言如C#和VB.NET进行数据读写及处理操作。
ADO.NET主要组件
数据源
数据源是指数据存储的位置,例如SQL Server、Oracle、MySQL等数据库。数据源的相关信息需要在应用程序中进行配置。
连接管理器
ADO.NET连接管理器可以建立到数据源的连接,并支持配置连接字符串、打开、关闭、激活、测试等操作。
命令对象
ADO.NET命令对象是执行对数据源的查询、更新以及存储过程的重要对象。其中包括SqlCommand、SqlDataAdapter、SqlDataReader、SqlTransaction等对象。
数据适配器
数据适配器是一个连接器,用于连接应用程序的数据源和数据集,并利用其中的数据更新数据源。Adpater除了查询数据,还可以利用Fill方法把多条记录集一次性移到客户端,也可以把变更的数据同步至数据源。主要包括SqlDataAdapter、OleDbDataAdapter、OracleDataAdapter等适配器。
数据集
ADO.NET的数据集是在数据源执行操作时中间存储的结果集。DataSet、DataTable、DataRow和DataColumn等对象。
开始使用ADO.NET
连接数据库
对于连接数据库,首先要加载数据源驱动程序,然后利用连接对象建立到数据源的连接。在建立连接时,需要配置连接字符串,指明连接的用户名和密码等信息。
using System.Data.SqlClient;
//声明连接字符串
string connectionString = "Data Source=localhost\\SQLEXPRESS;Initial Catalog=Northwind;Integrated Security=True;";
//创建SqlConnection对象,连接到数据源
SqlConnection connection = new SqlConnection(connectionString);
//打开连接
connection.Open();
使用命令对象查询数据
可以使用SqlCommand对象来执行对数据库的SqlCommand.Select,SqlCommand.Insert,SqlCommand.Update和SqlCommand.Delete等SQL查询语句。
using System.Data.SqlClient;
//声明执行查询的SQL语句
string queryString = "SELECT EmployeeID, LastName, FirstName FROM Employees WHERE City = @city";
//创建SqlCommand对象并设置查询语句和连接对象
SqlCommand command = new SqlCommand(queryString, connection);
//添加参数
command.Parameters.AddWithValue("@city", "London");
//执行查询并返回一个SqlDataReader对象
SqlDataReader reader = command.ExecuteReader();
//循环遍历每一行结果,并输出记录的某些值
while (reader.Read())
{
Console.WriteLine("{0}\t{1}\t{2}",
reader.GetInt32(0), reader.GetString(1), reader.GetString(2));
}
//关闭SqlDataReader对象
reader.Close();
使用数据适配器填充数据集
可以使用SqlDataAdapter对象来填充数据集。示例如下:
using System.Data.SqlClient;
//声明一个SqlDataAdapter对象
SqlDataAdapter dataAdapter = new SqlDataAdapter();
//声明执行查询的SQL语句
string queryString = "SELECT EmployeeID, LastName, FirstName FROM Employees WHERE City = @city";
//创建一个可以连接到数据源的SqlCommand对象
SqlCommand command = new SqlCommand(queryString, connection);
//使用SqlCommand对象的参数集合
command.Parameters.AddWithValue("@city", "London");
//使用SqlCommand对象为DataAdapter设置SelectCommand属性
dataAdapter.SelectCommand = command;
//声明一个数据集
DataSet dataSet = new DataSet("EmployeeSet");
//使用DataAdapter填充数据集
dataAdapter.Fill(dataSet, "Employees");
//在数据集的表中遍历每个行数据
foreach (DataRow dataRow in dataSet.Tables["Employees"].Rows)
{
Console.WriteLine("{0}\t{1}\t{2}", dataRow["EmployeeID"], dataRow["LastName"], dataRow["FirstName"]);
}
ADO.NET使用中的一些实用经验
-
尽量使用连接池
在Web应用程序中,通常需要使用多个并发连接,为了节省连接资源和优化系统性能,可以使用连接池技术缓存连接,并根据连接使用情况自动回收未使用的连接。 -
使用存储过程
存储过程是预编译的SQL代码的集合,可以在数据库服务器上执行,可以有效提高性能和减少数据库系统开销,也可以加强对数据的安全性。
可以使用SqlCommand对象的CommandType属性为存储过程创建SqlCommand对象。
示例:
//声明执行存储过程的SqlCommand对象
SqlCommand cmdOrderTotal = new SqlCommand("CustOrderTotal", connection);
cmdOrderTotal.CommandType = CommandType.StoredProcedure;
//为存储过程的参数赋值
cmdOrderTotal.Parameters.AddWithValue("@CustomerID", "ALFKI");
cmdOrderTotal.Parameters.Add("@Total", SqlDbType.Money);
cmdOrderTotal.Parameters["@Total"].Direction = ParameterDirection.Output;
//执行存储过程
cmdOrderTotal.ExecuteNonQuery();
//读取输出参数的值
decimal orderTotal = (decimal)cmdOrderTotal.Parameters["@Total"].Value;
- 对于一些可变的查询条件最好使用SqlParameter
使用SqlParameter可以有效防止SQL注入攻击,同时也增加了代码清晰度和调试灵活性。
示例:
//声明执行查询的SQL语句和参数化查询参数
string queryString = "SELECT EmployeeID, LastName, FirstName FROM Employees WHERE City = @city AND Country = @country";
//创建SqlCommand对象并设置查询语句和连接对象
SqlCommand command = new SqlCommand(queryString, connection);
//添加参数SqlParameter对象
SqlParameter cityParam = new SqlParameter("@city", SqlDbType.NVarChar, 30);
cityParam.Value = "Redmond";
SqlParameter countryParam = new SqlParameter("@country", SqlDbType.NVarChar, 30);
countryParam.Value = "USA";
command.Parameters.Add(cityParam);
command.Parameters.Add(countryParam);
//执行查询并返回一个SqlDataReader对象
SqlDataReader reader = command.ExecuteReader();
//循环遍历每一行结果,并输出记录的某些值
while (reader.Read())
{
Console.WriteLine("{0}\t{1}\t{2}",
reader.GetInt32(0), reader.GetString(1), reader.GetString(2));
}
//关闭SqlDataReader对象
reader.Close();
以上就是ADO.NET实用经验的一些攻略和示例。希望您可以通过本攻略了解ADO.NET的基本组成和应用场景,并掌握一些实用的技巧。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:ADO.NET实用经验汇总 - Python技术站