C# 如何更新SQL表逻辑

C# 如何更新SQL表逻辑,c#,sql,sql-server,webforms,C#,Sql,Sql Server,Webforms,我有一张桌子的结构是 Table 3 Fruit ID - Foreign Key (Primary Key of Table 1) Crate ID - Foreign Key (Primary Key of Table 2) 现在我需要执行一个查询 更新水果ID的板条箱ID如果水果ID已在表中,如果未在表中,则在表3中插入记录作为新记录。 这就是我现在的代码 private void RelateFuirtWithCrates(List<string> selecte

我有一张桌子的结构是

Table 3

Fruit ID -  Foreign Key  (Primary Key of Table 1)
Crate ID -  Foreign Key  (Primary Key of Table 2)
现在我需要执行一个查询

更新
水果ID的板条箱ID
如果
水果ID
已在表中,如果未在表中,则在表3中插入记录作为新记录。

这就是我现在的代码

private void RelateFuirtWithCrates(List<string> selectedFruitIDs, int selectedCrateID)
{

   string insertStatement = "INSERT INTO Fruit_Crate(FruitID, CrateID) Values " +
        "(@FruitID, @CrateID);";  ?? I don't think if it's right query

        using (SqlConnection connection = new SqlConnection(ConnectionString()))
        using (SqlCommand cmd = new SqlCommand(insertStatement, connection))
        {
            connection.Open();
            cmd.Parameters.Add(new SqlParameter("@FruitID", ????? Not sure what goes in here));
            cmd.Parameters.Add(new SqlParameter("@CrateID",selectedCrateID));        
}
private void RelateFuirtWithCrates(列出selectedfruitid、int selectedCrateID)
{
string insertStatement=“插入水果箱(水果ID,板条箱ID)值”+
“(@FruitID,@CrateID);”;?我认为这是不对的
使用(SqlConnection连接=新的SqlConnection(ConnectionString()))
使用(SqlCommand cmd=newsqlcommand(insertStatement,connection))
{
connection.Open();
cmd.Parameters.Add(新的SqlParameter(“@FROUTID”,不确定这里是什么);
cmd.Parameters.Add(新的SqlParameter(“@CrateID”,selectedCrateID));
}
您可以使用SQL Server中的
MERGE
语法执行“upsert”:

MERGE [SomeTable] AS target
USING (SELECT @FruitID, @CrateID) AS source (FruitID, CrateID)
ON (target.FruitID = source.FruitID)
WHEN MATCHED THEN 
    UPDATE SET CrateID = source.CrateID
WHEN NOT MATCHED THEN   
    INSERT (FruitID, CrateID)
    VALUES (source.FruitID, source.CrateID);
否则,您可以使用以下内容:

update [SomeTable] set CrateID = @CrateID where FruitID = @FruitID
if @@rowcount = 0
    insert [SomeTable] (FruitID, CrateID) values (@FruitID, @CrateID)

@user13814
MERGE
语法适用于列表,但是:在参数方面并不容易。您需要查看“表值参数”或使用某种“拆分”udf。或者只是添加许多参数。谢谢,但我仍然不知道如何添加FruitIDs作为sql参数,先生,所以问了另一个问题,@user13814这实际上是一件非常困难的事情;我添加了一个使用“dapper”的示例对于您后面的一个问题,我们专门添加了一些帮助程序代码,以支持此常见但令人烦恼的场景可能的重复