2010-06-04 5 views
2

J'ai utilisé le fournisseur System.Data.SQLite pour mon application. Lorsque j'essaie de créer un nouvel objet et l'insérer dans la base de données, cependant, j'obtiens un SQL syntax error near "SELECT".LINQ-to-SQL avec SQLite: erreur de syntaxe près de "SELECT" lors de l'insertion

Fondamentalement, mon code ressemble à:

//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(); 

mais répartis dans certaines méthodes.

Est-ce un problème commun/débutant? Si oui, qu'est-ce que je fais de mal? Sinon, où/comment dois-je déboguer cela? Je suis plutôt nouveau chez LINQ-to-SQL.

MISE À JOUR: La sortie du journal de la dernière requête générée avant que l'erreur est la suivante:

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 
+1

Je suis assez sûr que SCOPE_IDENTITY() est spécifique à T-SQL (SQL Server). – GalacticCowboy

Répondre

3

Il y a un article ici sur la façon de montrer le SQL généré qui pourrait donner une meilleure idée de ce que SQLite n'aime pas: http://msdn.microsoft.com/en-us/library/bb386961.aspx

EDIT for log: Dans la partie SqlProvider (Sql2008), il semble que l'on essaie d'utiliser la syntaxe SqlServer 2008 au lieu de la syntaxe SQLite, ce qui expliquerait pourquoi la syntaxe n'est pas valide.

EDIT à nouveau pour plus d'info: Voir cette question pour plus d'informations sur SQLite et LINQ: LINQ with SQLite (linqtosql)