在C#中,您可以使用事务来确保多个表的数据写入是原子性的,即要么全部成功提交,要么全部回滚。
以下是一个示例代码,演示如何使用事务来写入多个表的数据:
using System;
using System.Data;
using System.Data.SqlClient;
public class Program
{
public static void Main()
{
string connectionString = "YourConnectionString"; // 替换为您的数据库连接字符串
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
// 开始事务
SqlTransaction transaction = connection.BeginTransaction();
try
{
// 执行第一个表的插入操作
using (SqlCommand command1 = new SqlCommand("INSERT INTO Table1 (Column1) VALUES (@Value1)", connection, transaction))
{
command1.Parameters.AddWithValue("@Value1", "Value1");
command1.ExecuteNonQuery();
}
// 执行第二个表的插入操作
using (SqlCommand command2 = new SqlCommand("INSERT INTO Table2 (Column1) VALUES (@Value2)", connection, transaction))
{
command2.Parameters.AddWithValue("@Value2", "Value2");
command2.ExecuteNonQuery();
}
// 提交事务
transaction.Commit();
Console.WriteLine("数据写入成功!");
}
catch (Exception ex)
{
Console.WriteLine("发生错误:" + ex.Message);
// 回滚事务
transaction.Rollback();
}
}
}
}
在上述代码中,我们首先创建一个SqlConnection对象,并使用您的数据库连接字符串进行初始化。然后,我们打开连接并开始一个事务。
在事务中,我们可以使用SqlCommand对象执行每个表的插入操作。在每个SqlCommand对象中,我们使用参数化查询来防止SQL注入攻击,并将参数值设置为要插入的数据。
如果所有的插入操作都成功执行,我们就可以使用transaction.Commit()提交事务。如果在任何一个插入操作中发生错误,我们就会捕获异常,并使用transaction.Rollback()回滚事务。
请注意,上述代码中的数据库连接字符串和表名是示例,您需要根据您的实际情况进行相应的更改。