了解ADO.NET数据库先关技巧说明("掌握ADO.NET数据库实用技巧详解")
原创
一、引言
ADO.NET 是一种用于访问和操作数据库的编程模型,它为开发者提供了一组充裕的类库,使在.NET应用程序中处理数据库变得更加简洁和高效。本文将详细介绍一些实用的 ADO.NET 数据库技巧,帮助开发者更好地掌握这一技术。
二、连接数据库
在 ADO.NET 中,使用 Connection 对象来形成与数据库的连接。以下是一个连接 SQL Server 数据库的示例:
using System;
using System.Data.SqlClient;
class Program
{
static void Main()
{
string connectionString = "server=.;database=TestDB;uid=sa;pwd=123456";
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
Console.WriteLine("数据库连接胜利!");
}
}
}
三、执行 SQL 命令
在 ADO.NET 中,使用 Command 对象来执行 SQL 命令。以下是一个执行 SQL 查询的示例:
using System;
using System.Data.SqlClient;
class Program
{
static void Main()
{
string connectionString = "server=.;database=TestDB;uid=sa;pwd=123456";
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
string query = "SELECT * FROM dbo.Users";
using (SqlCommand command = new SqlCommand(query, connection))
{
using (SqlDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
Console.WriteLine($"{reader["Id"]}, {reader["Name"]}");
}
}
}
}
}
}
四、参数化查询
参数化查询是防止 SQL 注入的有效方法。以下是一个使用参数化查询的示例:
using System;
using System.Data.SqlClient;
class Program
{
static void Main()
{
string connectionString = "server=.;database=TestDB;uid=sa;pwd=123456";
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
string query = "SELECT * FROM dbo.Users WHERE Name = @Name";
using (SqlCommand command = new SqlCommand(query, connection))
{
command.Parameters.AddWithValue("@Name", "张三");
using (SqlDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
Console.WriteLine($"{reader["Id"]}, {reader["Name"]}");
}
}
}
}
}
}
五、事务处理
在 ADO.NET 中,可以使用事务来确保操作的原子性。以下是一个使用事务的示例:
using System;
using System.Data;
using System.Data.SqlClient;
class Program
{
static void Main()
{
string connectionString = "server=.;database=TestDB;uid=sa;pwd=123456";
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
using (SqlTransaction transaction = connection.BeginTransaction())
{
try
{
using (SqlCommand command1 = new SqlCommand("UPDATE dbo.Users SET Name = '李四' WHERE Id = 1", connection, transaction))
{
command1.ExecuteNonQuery();
}
using (SqlCommand command2 = new SqlCommand("UPDATE dbo.Users SET Age = 25 WHERE Id = 1", connection, transaction))
{
command2.ExecuteNonQuery();
}
transaction.Commit();
Console.WriteLine("事务提交胜利!");
}
catch (Exception ex)
{
transaction.Rollback();
Console.WriteLine("事务回滚:" + ex.Message);
}
}
}
}
}
六、批量操作
批量操作可以节约数据库处理的高效能。以下是一个使用批量插入的示例:
using System;
using System.Data;
using System.Data.SqlClient;
class Program
{
static void Main()
{
string connectionString = "server=.;database=TestDB;uid=sa;pwd=123456";
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connection))
{
bulkCopy.DestinationTableName = "dbo.Users";
bulkCopy.ColumnMappings.Add("Id", "Id");
bulkCopy.ColumnMappings.Add("Name", "Name");
DataTable dataTable = new DataTable();
dataTable.Columns.Add("Id", typeof(int));
dataTable.Columns.Add("Name", typeof(string));
for (int i = 1; i <= 1000; i++)
{
dataTable.Rows.Add(i, $"User{i}");
}
bulkCopy.WriteToServer(dataTable);
Console.WriteLine("批量插入胜利!");
}
}
}
}
七、数据集和数据表
在 ADO.NET 中,DataSet 和 DataTable 是用于处理内存中数据的两个重要类。以下是一个使用 DataSet 和 DataTable 的示例:
using System;
using System.Data;
using System.Data.SqlClient;
class Program
{
static void Main()
{
string connectionString = "server=.;database=TestDB;uid=sa;pwd=123456";
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
string query = "SELECT * FROM dbo.Users";
using (SqlCommand command = new SqlCommand(query, connection))
{
using (SqlDataAdapter adapter = new SqlDataAdapter(command))
{
DataSet dataSet = new DataSet();
adapter.Fill(dataSet, "Users");
DataTable dataTable = dataSet.Tables["Users"];
foreach (DataRow row in dataTable.Rows)
{
Console.WriteLine($"{row["Id"]}, {row["Name"]}");
}
}
}
}
}
}
八、异步操作
异步操作可以节约应用程序的响应性。以下是一个使用异步查询的示例:
using System;
using System.Data;
using System.Data.SqlClient;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
string connectionString = "server=.;database=TestDB;uid=sa;pwd=123456";
using (SqlConnection connection = new SqlConnection(connectionString))
{
await connection.OpenAsync();
string query = "SELECT * FROM dbo.Users";
using (SqlCommand command = new SqlCommand(query, connection))
{
using (SqlDataReader reader = await command.ExecuteReaderAsync())
{
while (await reader.ReadAsync())
{
Console.WriteLine($"{reader["Id"]}, {reader["Name"]}");
}
}
}
}
}
}
九、总结
本文介绍了 ADO.NET 数据库的一些实用技巧,包括连接数据库、执行 SQL 命令、参数化查询、事务处理、批量操作、数据集和数据表、异步操作等。掌握这些技巧可以帮助开发者更高效地处理数据库操作,节约应用程序的性能和稳定性。