1

我在 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 + "')");
4

3 回答 3

1

尝试 ExecuteStoreCommand 而不是使用 Query

参考: 实体框架:设置 MySQL 自定义环境变量

于 2013-10-23T20:41:01.517 回答
0

我建议编写一个包含所有语句的存储过程,并从您的代码中执行此存储过程。这将更容易管理。

于 2013-10-23T20:57:56.050 回答
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

于 2013-10-23T21:26:47.793 回答