如何使用c#Windows窗体更新现有记录并在不存在记录时插入新记录
首先,我使用的是Windows Form C#和SQL Server 2014 我有一个更新表单,请参见下图 这是数据库和datagridview中的现有记录如果我添加新记录,我想更新现有记录并在数据库中插入新记录以下只是更新现有记录如果我在datagridview中添加新记录,它不会插入新记录 我的C代码如何使用c#Windows窗体更新现有记录并在不存在记录时插入新记录,c#,sql-server,datagridview,C#,Sql Server,Datagridview,首先,我使用的是Windows Form C#和SQL Server 2014 我有一个更新表单,请参见下图 这是数据库和datagridview中的现有记录如果我添加新记录,我想更新现有记录并在数据库中插入新记录以下只是更新现有记录如果我在datagridview中添加新记录,它不会插入新记录 我的C代码 修改存储过程,如 ALTER PROCEDURE [dbo].[Update_Purchase] ( @Invoice_no int, @Date_of_Purchase date, @
修改存储过程,如
ALTER PROCEDURE [dbo].[Update_Purchase]
(
@Invoice_no int,
@Date_of_Purchase date,
@Item_Code int,
@Item_Name Nvarchar(100),
@Descriptin Nvarchar(MAX),
@Supplier_Name Nvarchar(100),
@Company_Name Nvarchar(100),
@Quantity int,
@Unit_Price int,
@Total_Price int,
@Selling_Price int,
@Discount int,
@Paid_Amount int,
@Remaining int,
@Sub_Total int,
@Total int,
@Updated_Date date
)
AS
BEGIN
IF NOT EXISTS (SELECT 1 FROM Purchase_Order_Log WHERE Invoice_no = @Invoice_no AND Item_Code = @Item_Code)
BEGIN
INSERT INTO Purchase_Order_Log (Invoice_no , Date_of_Purchase, Item_Code, Item_Name, Descriptin, Supplier_Name, Company_Name,
Quantity, Unit_Price, Total_Price, Selling_Price, Discount, Paid_Amount, Remaining, Sub_Total, Total, Updated_Date)
VALUES
(@Invoice_no, @Date_of_Purchase, @Item_Code, @Item_Name, @Descriptin, @Supplier_Name, @Company_Name,
@Quantity, @Unit_Price, @Total_Price, @Selling_Price, @Discount, @Paid_Amount, @Remaining, @Sub_Total,Total, @Updated_Date)
END
ELSE
UPDATE Purchase_Order_Log SET Invoice_no = @Invoice_no, Date_of_Purchase =
@Date_of_Purchase, Item_Code = @Item_Code, Item_Name = @Item_Name,
Descriptin = @Descriptin, Supplier_Name = @Supplier_Name, Company_Name =
@Company_Name, Quantity = @Quantity, Unit_Price = @Unit_Price, Total_Price =
@Total_Price, Selling_Price = @Selling_Price, Discount = @Discount,
Paid_Amount = @Paid_Amount, Remaining = @Remaining, Sub_Total = @Sub_Total,
Total = @Total, Updated_Date = @Updated_Date
WHERE Invoice_no = @Invoice_no AND Item_Code = @Item_Code
根据您的要求修改
如果不存在
条件修改存储过程,如
ALTER PROCEDURE [dbo].[Update_Purchase]
(
@Invoice_no int,
@Date_of_Purchase date,
@Item_Code int,
@Item_Name Nvarchar(100),
@Descriptin Nvarchar(MAX),
@Supplier_Name Nvarchar(100),
@Company_Name Nvarchar(100),
@Quantity int,
@Unit_Price int,
@Total_Price int,
@Selling_Price int,
@Discount int,
@Paid_Amount int,
@Remaining int,
@Sub_Total int,
@Total int,
@Updated_Date date
)
AS
BEGIN
IF NOT EXISTS (SELECT 1 FROM Purchase_Order_Log WHERE Invoice_no = @Invoice_no AND Item_Code = @Item_Code)
BEGIN
INSERT INTO Purchase_Order_Log (Invoice_no , Date_of_Purchase, Item_Code, Item_Name, Descriptin, Supplier_Name, Company_Name,
Quantity, Unit_Price, Total_Price, Selling_Price, Discount, Paid_Amount, Remaining, Sub_Total, Total, Updated_Date)
VALUES
(@Invoice_no, @Date_of_Purchase, @Item_Code, @Item_Name, @Descriptin, @Supplier_Name, @Company_Name,
@Quantity, @Unit_Price, @Total_Price, @Selling_Price, @Discount, @Paid_Amount, @Remaining, @Sub_Total,Total, @Updated_Date)
END
ELSE
UPDATE Purchase_Order_Log SET Invoice_no = @Invoice_no, Date_of_Purchase =
@Date_of_Purchase, Item_Code = @Item_Code, Item_Name = @Item_Name,
Descriptin = @Descriptin, Supplier_Name = @Supplier_Name, Company_Name =
@Company_Name, Quantity = @Quantity, Unit_Price = @Unit_Price, Total_Price =
@Total_Price, Selling_Price = @Selling_Price, Discount = @Discount,
Paid_Amount = @Paid_Amount, Remaining = @Remaining, Sub_Total = @Sub_Total,
Total = @Total, Updated_Date = @Updated_Date
WHERE Invoice_no = @Invoice_no AND Item_Code = @Item_Code
根据您的要求修改您的
如果不存在
条件您可以使用SQL Server合并来实现这一点,只需使用一条语句即可
MERGE dbo.Test WITH (SERIALIZABLE) AS T
USING (VALUES (3012, 'john')) AS U (id, name)
ON U.id = T.id
WHEN MATCHED THEN
UPDATE SET T.name = U.name
WHEN NOT MATCHED THEN
INSERT (id, name)
VALUES (U.id, U.name);
在这里,它检查表Test上的列ID的值3012,如果找到匹配项,则更新记录,否则将插入相同的值。您可以使用SQL Server合并来完成此操作,只需使用一条语句。如下所示
MERGE dbo.Test WITH (SERIALIZABLE) AS T
USING (VALUES (3012, 'john')) AS U (id, name)
ON U.id = T.id
WHEN MATCHED THEN
UPDATE SET T.name = U.name
WHEN NOT MATCHED THEN
INSERT (id, name)
VALUES (U.id, U.name);
在表测试中,它检查列ID的值3012,如果找到匹配项,则更新记录。否则,“@ SpjGER的可能副本”让我实现这一点:)您也可以考虑使用合并语句。正确的数据绑定将为您处理这个问题,而不管您是否使用单独的插入和更新。过程或合并过程。您不必在行上循环,您只需在<代码> SqLDATAdAdult上调用Update()。@ SpordGER的可能副本让我实现这一点:)您也可以考虑使用合并语句。正确的数据绑定将为您处理这一问题,而不管您是否使用单独的插入和更新过程或合并过程。您不必在行上循环,只需在
SqlDataAdapter
上调用Update()。其工作正常:)其工作正常:)