我正在使用带有C#的razor,我需要在SQL中声明一个变量,但它不起作用。
insert_data = db.Query("DECLARE @myid INT");
我收到以下错误
解析查询时出错。 [令牌行号= 1,令牌行偏移= 1,令牌错误= DECLARE]
编辑:
我正在尝试将数据放入一个表中,然后获取其唯一ID并将其插入另一个表中。
insert_data = db.Query("INSERT INTO sorted (sorted_words) SELECT '" + sorted_word + "' WHERE NOT EXISTS (SELECT sorted_words FROM sorted WHERE sorted_words = '" + sorted_word + "')");
insert_data = db.Query("DECLARE @myid BIGINT");
insert_data = db.Query("SET @myid = scope_identity()");
insert_data = db.Query("INSERT INTO words (words, sorted_id) SELECT '" + word + "', @myid WHERE NOT EXISTS (SELECT words FROM words WHERE words = '" + word + "')");
答案 0 :(得分:1)
尝试使用ExecuteStoreCommand而不是使用Query
Refrence: Entity Framework : Set MySQL custom environment variables
答案 1 :(得分:0)
我建议编写一个包含所有语句的存储过程,并从代码中执行此存储过程。这将更容易管理。
答案 2 :(得分:0)
SQL Compact参数的声明方式与SQL Server的声明方式不同。使用数据库帮助程序时,您应该为参数@0
,@1
,@2
等命名,每次递增1。此外,Database.Query
方法用于选择多行数据。您应该使用Execute
进行插入,使用GetLastInsertId
获取最新行的标识值:
db.Execute("INSERT INTO sorted (sorted_words) SELECT @0 WHERE NOT EXISTS (SELECT sorted_words FROM sorted WHERE sorted_words = @0)", sorted_word);
var id = (int)db.GetLastInsertId();
db.Execute("INSERT INTO words (words, sorted_id) SELECT @0, @1 WHERE NOT EXISTS (SELECT words FROM words WHERE words = @0)", word, id);
在此处阅读有关在Razor网页中处理数据的更多信息:http://www.asp.net/web-pages/tutorials/data