SQL 服务器 CE 无法识别 DECLARE、BEGIN、COMMIT
SQL Server CE doesnt recognize DECLARE, BEGIN, COMMIT
我试图在单个查询中的两个 table 中插入数据。第二个 table 需要第一个的 scope_identity()
值。
我的查询是:
String query = "DECLARE @questionID int;
INSERT INTO question (questionText) VALUES(@question);SELECT @questionID = scope_identity();
INSERT INTO topic_question(toppicID,questionID) VALUES(@topic,@questionID);";
执行为:
SqlCeCommand commandInsert = new SqlCeCommand(query, connection);
commandInsert.Parameters.AddWithValue("@question", question);
commandInsert.ExecuteScalar();
收到一条错误消息:
There was an error Parsing the query.Token Line number =1, Token line offset =1, Token in error = DECLARE. ..........
我尝试在查询开头使用 BEGIN TRANSACTION
,在查询最后使用 COMMIT
。但仍然存在错误。任何人都可以请注意,我做错了什么?
您不能在 SQL Server CE 中声明变量并且每个命令只允许一个语句。
所以你必须拆分你的语句并像这样一个一个地执行它:
SqlCeCommand cmd = new SqlCeCommand("INSERT INTO question (questionText) VALUES(@question)", connection);
cmd.Parameters.AddWithValue("@question", question);
cmd.ExecuteNonQuery();
cmd.CommandText = "select @@IDENTITY";
cmd.Parameters.Clear();
var id = cmd.ExecuteScalar();
cmd.CommandText = "INSERT INTO topic_question(toppicID,questionID) VALUES(@topic,@questionID);"
cmd.Parameters.Clear();
cmd.Parameters.AddWithValue("@topic",.....);
cmd.Parameters.AddWithValue("@questionID", id);
cmd.ExecuteNonQuery();
请注意,您必须在第一次调用 cmd.ExecuteNonQuery();
后保持连接打开(不要关闭它),以便 select @@identity
工作。
我试图在单个查询中的两个 table 中插入数据。第二个 table 需要第一个的 scope_identity()
值。
我的查询是:
String query = "DECLARE @questionID int;
INSERT INTO question (questionText) VALUES(@question);SELECT @questionID = scope_identity();
INSERT INTO topic_question(toppicID,questionID) VALUES(@topic,@questionID);";
执行为:
SqlCeCommand commandInsert = new SqlCeCommand(query, connection);
commandInsert.Parameters.AddWithValue("@question", question);
commandInsert.ExecuteScalar();
收到一条错误消息:
There was an error Parsing the query.Token Line number =1, Token line offset =1, Token in error = DECLARE. ..........
我尝试在查询开头使用 BEGIN TRANSACTION
,在查询最后使用 COMMIT
。但仍然存在错误。任何人都可以请注意,我做错了什么?
您不能在 SQL Server CE 中声明变量并且每个命令只允许一个语句。
所以你必须拆分你的语句并像这样一个一个地执行它:
SqlCeCommand cmd = new SqlCeCommand("INSERT INTO question (questionText) VALUES(@question)", connection);
cmd.Parameters.AddWithValue("@question", question);
cmd.ExecuteNonQuery();
cmd.CommandText = "select @@IDENTITY";
cmd.Parameters.Clear();
var id = cmd.ExecuteScalar();
cmd.CommandText = "INSERT INTO topic_question(toppicID,questionID) VALUES(@topic,@questionID);"
cmd.Parameters.Clear();
cmd.Parameters.AddWithValue("@topic",.....);
cmd.Parameters.AddWithValue("@questionID", id);
cmd.ExecuteNonQuery();
请注意,您必须在第一次调用 cmd.ExecuteNonQuery();
后保持连接打开(不要关闭它),以便 select @@identity
工作。