【问题标题】:LINQ-to-SQL with SQLite: syntax error near "SELECT" when inserting带有 SQLite 的 LINQ-to-SQL:插入时“SELECT”附近的语法错误
【发布时间】:2010-06-04 15:28:54
【问题描述】:

我一直在为我的应用程序使用System.Data.SQLite 提供程序。然而,当我尝试创建一个新对象并将其插入数据库时​​,我得到一个 SQL syntax error near "SELECT"

基本上我的代码如下:

//supplies is a DataContext connected to my DB
Table<Store> stores = supplies.Stores;
//...
Store newStore = new Store();
// A Store has an Id (pk autoincrement), Name, Number, and EntitySet<Usages>
newStore.Name = "New Store";
newStore.Number = 0;
//...
stores.InsertOnSubmit(newStore);
supplies.SubmitChanges();

但通过一些方法传播。

这是一个常见/新手问题吗?如果是这样,我做错了什么? 如果没有,我应该在哪里/如何调试它?我是 LINQ-to-SQL 的新手。

UPDATE:报错前生成的最后一个查询的日志输出是这样的:

INSERT INTO [Stores]([Number], [Name])
VALUES (@p0, @p1)

SELECT CONVERT(Int,SCOPE_IDENTITY()) AS [value]
-- @p0: Input Int32 (Size = 0; Prec = 0; Scale = 0) [0]
-- @p1: Input String (Size = 0; Prec = 0; Scale = 0) [New Store]
-- Context: SqlProvider(Sql2008) Model: AttributedMetaModel Build: 3.5.30729.4926

【问题讨论】:

  • 我很确定 SCOPE_IDENTITY() 特定于 T-SQL (SQL Server)。

标签: c# sql linq-to-sql system.data.sqlite


【解决方案1】:

这里有一篇关于如何显示正在生成的 SQL 的文章,这可能会更好地了解 SQLite 不喜欢什么:http://msdn.microsoft.com/en-us/library/bb386961.aspx

编辑日志:从 SqlProvider(Sql2008) 部分来看,它似乎正在尝试使用 SqlServer 2008 语法而不是 SQLite 语法,这可以解释为什么它认为语法无效。

再次编辑以获取更多信息:有关 SQLite 和 Linq 的信息,请参阅此问题:LINQ with SQLite (linqtosql)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-12
    • 2017-10-18
    • 2014-03-12
    • 1970-01-01
    • 2013-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多