在C#中,触发器(Trigger)通常用于数据库操作,而不是直接与C#代码交互。触发器是一种自动执行的数据库对象,当对一个表执行特定操作(如INSERT、UPDATE或DELETE)时,触发器会自动执行预定义的SQL语句。在多表联动的情况下,触发器可以帮助确保数据的一致性和完整性。
以下是一个简单的示例,说明如何在C#中使用触发器实现多表联动:
Orders
表,另一个是OrderDetails
表。Orders
表包含订单的基本信息,而OrderDetails
表包含每个订单的详细信息。这两个表通过OrderID
字段关联。CREATE TABLE Orders (
OrderID INT PRIMARY KEY,
CustomerID INT,
OrderDate DATETIME
);
CREATE TABLE OrderDetails (
OrderDetailID INT PRIMARY KEY,
OrderID INT,
ProductID INT,
Quantity INT,
FOREIGN KEY (OrderID) REFERENCES Orders(OrderID)
);
OrderDetails
表中插入一条新记录时,自动更新Orders
表中的TotalQuantity
字段。CREATE TRIGGER UpdateTotalQuantity
ON OrderDetails
AFTER INSERT
AS
BEGIN
UPDATE Orders
SET TotalQuantity = (SELECT SUM(Quantity) FROM OrderDetails WHERE Orders.OrderID = inserted.OrderID)
WHERE Orders.OrderID = inserted.OrderID;
END;
Orders
表中的TotalQuantity
字段。using System;
using System.Data.SqlClient;
class Program
{
static void Main()
{
string connectionString = "your_connection_string";
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
// 插入订单详情
string insertOrderDetailSql = "INSERT INTO OrderDetails (OrderID, ProductID, Quantity) VALUES (@OrderID, @ProductID, @Quantity)";
using (SqlCommand command = new SqlCommand(insertOrderDetailSql, connection))
{
command.Parameters.AddWithValue("@OrderID", 1);
command.Parameters.AddWithValue("@ProductID", 101);
command.Parameters.AddWithValue("@Quantity", 2);
command.ExecuteNonQuery();
}
// 查询订单详情
string selectOrderSql = "SELECT * FROM Orders WHERE OrderID = 1";
using (SqlCommand command = new SqlCommand(selectOrderSql, connection))
{
using (SqlDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
Console.WriteLine($"OrderID: {reader["OrderID"]}, TotalQuantity: {reader["TotalQuantity"]}");
}
}
}
}
}
}
在这个示例中,当在OrderDetails
表中插入一条新记录时,触发器会自动更新Orders
表中的TotalQuantity
字段。这样,C#代码可以直接查询Orders
表以获取最新的订单总量。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。