【发布时间】:2015-12-01 10:18:16
【问题描述】:
我在 C# 中使用 SQLite,并且在数据库中有一个表,如果表为空,我想在其中插入一行,否则如果其中有一行,则更新表中的行。该表将只有一行,因此没有必要限制 UPDATE 命令。如果我注释掉更新部分和行计数部分只留下插入部分,那么它会很好地插入一行,但下面实现我想要的功能的代码会在 Visual Studio 中引发错误,我不知道为什么。
using (SQLiteConnection con = new SQLiteConnection(cs))
{
con.Open();
using (SQLiteCommand cmd = new SQLiteCommand(con))
{
cmd.CommandText = "UPDATE details SET (initials = @init, participantID = @ID, affectedSide = @side, age = @age, comments = @comm) IF @@ROWCOUNT = 0 INSERT INTO details (initials, participantID , affectedSide , age, comments) VALUES (@init, @ID, @side, @age, @comm)";
cmd.Parameters.AddWithValue("@init", InitalsTextBox.Text);
cmd.Parameters.AddWithValue("@ID", IDTextBox.Text);
cmd.Parameters.AddWithValue("@side", side);
cmd.Parameters.AddWithValue("@age", ageindex);
cmd.Parameters.AddWithValue("@comm", ParticipantText.Text);
cmd.ExecuteNonQuery();
}
con.Close();
}
错误:
“System.Data.SQLite.SQLiteException”类型的异常发生在 System.Data.SQLite.dll 但未在用户代码中处理
附加信息:SQL 逻辑错误或缺少数据库
“(”附近:语法错误
【问题讨论】:
-
显示什么错误?
-
请在此处提及您的错误
-
我没有使用 SQLite,但我怀疑这样的命令会被您使用的客户端库解析。将其拆分为两个单独的命令,首先运行更新命令,如果它的
ExecuteNonQuery将返回 0,则运行插入命令。 -
我添加了错误@MattMurdock
-
为了试一试,请在 IF 语句周围加上大括号。