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

标签 c# sql-server

我已经检查了 Stackoverflow 上的许多帖子,但我仍然坚持下面的查询。我是学习 C# 的初学者,希望得到帮助。

Error: Incorrect Syntax near keyword ELSE

我正在尝试检查是否应该执行下面的问题 1 或问题 2(如果选择了其中一个)。还有一次它给了我一个错误 @answer2 not defined。

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);";

关于C# 如果在 SQL 更新中可用,否则插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59542991/

相关文章:

java - JDBC和mySQL将相关数据库表转换为对象

C# - 将 List<JToken> 转换为 List<string> 单行

c# - 如何在 visual studio 之外运行 SpecFlow 测试

c# - Web API 自定义验证以根据批准的值列表检查字符串

java - Hibernate 5 插入后更新

sql - 如何在sql数据库中所有表的所有列中搜索和替换字符串的一部分

c# - 如何安全地创建一个查询,该查询将列出给定表名的列名以及可能指向 SQL Server 或 MySQL 的连接字符串?

c# - Entity Framework 仅在更新时抛出异常 - 无效的对象名称 'dbo.BirdBrain.service'

sql-server - 在 SSMS v18.0+ 中调试 SQL

sql-server - 无法安装 SQL Server 2008 R2