簡體   English   中英

C# 如果在 SQL 更新中可用,否則插入

[英]C# if available in SQL Update else insert

我已經檢查了 Stackoverflow 上的許多帖子,但我仍然堅持下面的查詢。 我是學習 C# 的初學者,會請求幫助。

錯誤:關鍵字 ELSE 附近的語法不正確

我正在嘗試檢查是否選擇了 Question1 或 Question2 中的任何一個,則應執行以下操作。 還有其他時候它給了我一個錯誤@answer2 未定義。

string query = @"IF EXISTS(SELECT * FROM dbo.tbl_pkt_Answers_Submitted  WHERE (Questions = @Question1 or Questions = @Question2))

    UPDATE dbo.tbl_pkt_Answers_Submitted 
    SET AnswersSubmitted = @Answer1
    WHERE Questions = @Question1;

    UPDATE dbo.tbl_pkt_Answers_Submitted 
    SET AnswersSubmitted = @Answer2
    WHERE Questions = @Question2;

    ELSE

    INSERT INTO dbo.tbl_pkt_Answers_Submitted(Questions, AnswersSubmitted)   
    VALUES (@Question1, @Answer1), (@Question2, @Answer2);";

SqlCommand cmd = new SqlCommand(query, con);

cmd.Parameters.Add("@Question1", lblQuestion1.Text);
cmd.Parameters.Add("@Question2", lblQuestion2.Text);

if (rdq1a1.Checked)
{
    cmd.Parameters.Add("@Answer1", rdq1a1.Text);
}

if (rdq1a2.Checked)
{
    cmd.Parameters.Add("@Answer1", rdq1a2.Text);
}

if (rdq1a3.Checked)
{
    cmd.Parameters.Add("@Answer1", rdq1a3.Text);
}

if (rdq1a4.Checked)
{
    cmd.Parameters.Add("@Answer1", rdq1a4.Text);
}

if (rdq2a1.Checked)
{
    cmd.Parameters.Add("@Answer2", rdq2a1.Text);
}

if (rdq2a2.Checked)
{
    cmd.Parameters.Add("@Answer2", rdq2a2.Text);
}

if (rdq2a3.Checked)
{
    cmd.Parameters.Add("@Answer2", rdq2a3.Text);
}

if (rdq2a4.Checked)
{
    cmd.Parameters.Add("@Answer2", rdq2a4.Text);
}

con.Open();
cmd.ExecuteNonQuery();

MessageBox.Show("Your Data has been saved");
con.Close();

IF 語句的“true”部分包含多個 SQL 語句,您必須將這些語句括在 BEGIN 和 END 中

string query = @"IF EXISTS(SELECT * FROM dbo.tbl_pkt_Answers_Submitted  WHERE (Questions = @Question1 or Questions = @Question2))
                 BEGIN
                    UPDATE dbo.tbl_pkt_Answers_Submitted 
                    SET AnswersSubmitted = @Answer1
                    WHERE Questions = @Question1;

                    UPDATE dbo.tbl_pkt_Answers_Submitted 
                    SET AnswersSubmitted = @Answer2
                    WHERE Questions = @Question2;
                 END
                 ELSE
                    INSERT INTO dbo.tbl_pkt_Answers_Submitted(Questions, AnswersSubmitted) 
                    VALUES(@Question1, @Answer1), (@Question2, @Answer2);";

這里的主要問題是IF之后的UPDATE語句沒有用BEGINEND括起來。 不使用那些只適用於單個批處理語句,而不是多個。 所以你的陳述應該是這樣的:

IF EXISTS(..)
BEGIN
UPDATE 1
UPDATE 2
END
ELSE
yadayada

看來您的 Insert 語句看起來很可疑。

INSERT INTO dbo.tbl_pkt_Answers_Submitted(Questions, AnswersSubmitted) 
VALUES(@Question1, @Answer1)";

此外,它沒有被開始和結束語句包圍。 它應該是

If exists ...
begin
...
end
else 
insert

您的 if 條件為真中有多個語句。 如果只有一個語句就可以了,但是如果有多個語句,則需要使用BEGIN...END

IF EXISTS(SELECT *
          FROM dbo.tbl_pkt_Answers_Submitted
          WHERE (Questions = @Question1 OR Questions = @Question2))
    BEGIN
        UPDATE dbo.tbl_pkt_Answers_Submitted
        SET AnswersSubmitted = @Answer1
        WHERE Questions = @Question1;

        UPDATE dbo.tbl_pkt_Answers_Submitted
        SET AnswersSubmitted = @Answer2
        WHERE Questions = @Question2;
    END
ELSE
    INSERT INTO dbo.tbl_pkt_Answers_Submitted(Questions, AnswersSubmitted)
    VALUES (@Question1, @Answer1),
           (@Question2, @Answer2);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM