了解ADO.NET数据库先关技巧说明("掌握ADO.NET数据库实用技巧详解")

原创
ithorizon 6个月前 (10-21) 阅读数 19 #后端开发

掌握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 命令、参数化查询、事务处理、批量操作、数据集和数据表、异步操作等。掌握这些技巧可以帮助开发者更高效地处理数据库操作,节约应用程序的性能和稳定性。


本文由IT视界版权所有,禁止未经同意的情况下转发

文章标签: 后端开发


热门