-
SqlCommandBuilder
SqlCommandBuilder 是 ADO.NET 中的一个类,用于自动生成 SqlCommand 的插入、更新和删除命令,以简化对数据表进行修改的操作。
当使用 SqlDataAdapter 填充 DataSet 并对其进行修改后,您通常需要将这些修改反馈回数据库。SqlCommandBuilder 可以自动根据 DataSet 的结构和内容生成相应的 SQL 命令,以便进行数据的插入、更新和删除。
使用 SqlCommandBuilder 有以下主要步骤:
- 创建 SqlCommandBuilder 对象:使用 SqlDataAdapter 创建 SqlCommandBuilder 对象,并将 SqlDataAdapter 对象传递给它。
SqlDataAdapter adapter = new SqlDataAdapter(selectCommand);
SqlCommandBuilder commandBuilder = new SqlCommandBuilder(adapter); - 自动生成命令:一旦 SqlCommandBuilder 与 SqlDataAdapter 关联,它将根据 SqlDataAdapter 的 SelectCommand 自动生成相应的 InsertCommand、UpdateCommand 和 DeleteCommand。这些命令将针对 DataSet 中的数据执行相应的操作。
// 自动生成插入、更新和删除命令
adapter.InsertCommand = commandBuilder.GetInsertCommand();
adapter.UpdateCommand = commandBuilder.GetUpdateCommand();
adapter.DeleteCommand = commandBuilder.GetDeleteCommand();
- 更新数据:使用 SqlDataAdapter 的 Update 方法,将修改后的 DataSet 中的数据反馈回数据库。
adapter.Update(dataSet, "TableName");
在调用 Update 方法时,SqlDataAdapter 将根据 SqlCommandBuilder 自动生成的命令来执行相应的数据库操作,将修改的数据插入、更新或删除到数据库中。
请注意,为了使 SqlCommandBuilder 能够正确生成命令,SqlDataAdapter 的 SelectCommand 必须提供有效的查询语句,并且查询结果中包含主键信息。这样,SqlCommandBuilder 才能根据主键来生成正确的更新和删除命令。
以下是一个简单的示例,演示了 SqlCommandBuilder 的用法:
string connectionString = "your_connection_string";
string sqlQuery = "SELECT * FROM Customers";
using (SqlConnection connection = new SqlConnection(connectionString)) { SqlDataAdapter adapter = new SqlDataAdapter(sqlQuery, connection);
SqlCommandBuilder commandBuilder = new SqlCommandBuilder(adapter);
DataSet dataSet = new DataSet();
// 填充数据到 DataSet 中的一个
DataTable adapter.Fill(dataSet, "Customers");
// 修改 DataSet 中的数据
// 自动生成命令
adapter.InsertCommand = commandBuilder.GetInsertCommand();
adapter.UpdateCommand = commandBuilder.GetUpdateCommand();
adapter.DeleteCommand = commandBuilder.GetDeleteCommand();
// 更新数据到数据库 adapter.Update(dataSet, "Customers"); }
通过使用 SqlCommandBuilder,您可以省去手动编写插入、更新和删除命令的过程,简化了对 DataSet 中数据的修改和反馈回数据库的操作。这样可以减少错误,并提高开发效率。
-
SqlCommand
SqlCommand 是 ADO.NET 中用于执行 SQL 命令的类。它表示要在 SQL 数据库上执行的命令,可以是查询语句(SELECT)、插入语句(INSERT)、更新语句(UPDATE)或删除语句(DELETE)。
使用 SqlCommand,您可以执行以下操作:
- 创建 SqlCommand 对象:首先,您需要创建一个 SqlCommand 对象,并指定要执行的 SQL 命令和连接对象。
SqlCommand command = new SqlCommand("SELECT * FROM Customers", connection);
在上述示例中,我们创建了一个 SqlCommand 对象,并指定要执行的 SELECT 语句以及与之关联的 SqlConnection 对象。
- 设置参数(可选):如果您的 SQL 命令包含参数,您可以使用 Parameters 属性添加参数并为其指定值。
command.Parameters.AddWithValue("@FirstName", "John");
在上述示例中,我们使用 AddWithValue 方法为 SQL 命令中的参数 "@FirstName" 设置了一个值。
- 执行命令:使用 SqlCommand 的 ExecuteReader、ExecuteNonQuery 或 ExecuteScalar 方法来执行 SQL 命令。
- ExecuteReader:对于 SELECT 语句,使用 ExecuteReader 方法返回一个 SqlDataReader 对象,用于读取查询结果的数据。
SqlDataReader reader = command.ExecuteReader(); while (reader.Read()) { // 处理查询结果 }
- ExecuteNonQuery:对于 INSERT、UPDATE 或 DELETE 语句,使用 ExecuteNonQuery 方法执行命令,并返回受影响的行数。
int rowsAffected = command.ExecuteNonQuery();
- ExecuteScalar:对于返回单个值的查询,使用 ExecuteScalar 方法执行命令,并返回查询结果的第一行第一列的值。
object result = command.ExecuteScalar();
在执行命令之后,您可以根据具体情况处理查询结果、受影响的行数或返回的单个值。
请注意,使用 SqlCommand 执行 SQL 命令之前,需要确保已经打开了与数据库的连接。可以使用 SqlConnection 的 Open 方法打开连接。
以下是一个简单的示例,演示了 SqlCommand 的用法:
string connectionString = "your_connection_string";
string sqlQuery = "SELECT * FROM Customers";
using (SqlConnection connection = new SqlConnection(connectionString)) {
connection.Open();
SqlCommand command = new SqlCommand(sqlQuery, connection);
SqlDataReader reader = command.ExecuteReader();
while (reader.Read())
{ // 处理查询结果 } reader.Close(); }
在上述示例中,我们创建了一个 SqlCommand 对象,并使用 ExecuteReader 方法执行 SELECT 查询,并通过 SqlDataReader 对象读取查询结果。
通过使用 SqlCommand,您可以在 ADO.NET 应用程序中执行各种 SQL 命令,处理查询结果或执行数据的插入、更新和删除操作。