Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# SQLite中实体框架核心的SQL插入失败_C#_Sqlite_Entity Framework Core - Fatal编程技术网

C# SQLite中实体框架核心的SQL插入失败

C# SQLite中实体框架核心的SQL插入失败,c#,sqlite,entity-framework-core,C#,Sqlite,Entity Framework Core,我有以下插入脚本: INSERT INTO Sections (ID, Name, Type, Notes, CodeI, CodeII, DataID, CodeIII, CodeIV, ShopID) VALUES ("787c4d0b-8b6e-4bed-8fb7-03932d0346cd", "Test shop", "R", NULL, "123456789", "1234", NULL, "11", "1234", NULL); 我使用一个带有实体框架核心的移动SQLite数据库

我有以下插入脚本:

INSERT INTO Sections (ID, Name, Type, Notes, CodeI, CodeII, DataID, CodeIII, CodeIV, ShopID) 
VALUES ("787c4d0b-8b6e-4bed-8fb7-03932d0346cd", "Test shop", "R", NULL, "123456789", "1234", NULL, "11", "1234", NULL);
我使用一个带有实体框架核心的移动SQLite数据库

这是我的executer方法:

public async Task ExecuteCommand(FormattableString command)
{
  if (command == null)
    throw new ArgumentNullException(nameof(command));
  try
  {
    await dbContext.Database.ExecuteSqlCommandAsync(command);
  }
  catch (Exception ex)
  {
    throw;
  }
}
这是调用代码:

var command = $"INSERT INTO Sections (ID, Name, Type, Notes, CodeI, CodeII, DataID, CodeIII, CodeIV, ShopID) 
VALUES ('787c4d0b-8b6e-4bed-8fb7-03932d0346cd', 'Test shop', 'R', NULL, '123456789', '1234', NULL, '11', '1234', NULL);"
await ExecuteCommand(command);
当我执行以下操作时:

 await dbContext.Database.ExecuteSqlCommandAsync(command);
我得到一个例外:

Microsoft.Data.Sqlite.SqliteException (0x80004005): SQLite Error 1: 'near "@p0": syntax error'.
  at Microsoft.Data.Sqlite.SqliteException.ThrowExceptionForRC (System.Int32 rc, SQLitePCL.sqlite3 db) [0x00067] in <56cfa09aae23467e945f1a64a1f893bb>:0 
  at Microsoft.Data.Sqlite.SqliteCommand+<PrepareAndEnumerateStatements>d__62.MoveNext () [0x0008a] in <56cfa09aae23467e945f1a64a1f893bb>:0 
  at Microsoft.Data.Sqlite.SqliteCommand.ExecuteReader (System.Data.CommandBehavior behavior) [0x0025d] in <56cfa09aae23467e945f1a64a1f893bb>:0 
  at Microsoft.Data.Sqlite.SqliteCommand.ExecuteReader () [0x00000] in <56cfa09aae23467e945f1a64a1f893bb>:0 
  at Microsoft.Data.Sqlite.SqliteCommand.ExecuteNonQuery () [0x00042] in <56cfa09aae23467e945f1a64a1f893bb>:0 
  at System.Data.Common.DbCommand.ExecuteNonQueryAsync (System.Threading.CancellationToken cancellationToken) [0x00049] in <6409c8a079bb4f4c8dff9761b9062573>:0 
--- End of stack trace from previous location where exception was thrown ---
  at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (System.Threading.Tasks.Task task) [0x0003e] in <43dbbdc147f2482093d8409abb04c233>:0 
  at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Threading.Tasks.Task task) [0x00028] in <43dbbdc147f2482093d8409abb04c233>:0 
  at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd (System.Threading.Tasks.Task task) [0x00008] in <43dbbdc147f2482093d8409abb04c233>:0 
  at System.Runtime.CompilerServices.TaskAwaiter`1[TResult].GetResult () [0x00000] in <43dbbdc147f2482093d8409abb04c233>:0 
  at Microsoft.EntityFrameworkCore.Storage.Internal.RelationalCommand+<ExecuteAsync>d__17.MoveNext () [0x00358] in <e12f0cc891a249419803faaf433b12e6>:0 
--- End of stack trace from previous location where exception was thrown ---
  at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (System.Threading.Tasks.Task task) [0x0003e] in <43dbbdc147f2482093d8409abb04c233>:0 
  at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Threading.Tasks.Task task) [0x00028] in <43dbbdc147f2482093d8409abb04c233>:0 
  at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd (System.Threading.Tasks.Task task) [0x00008] in <43dbbdc147f2482093d8409abb04c233>:0 
  at System.Runtime.CompilerServices.TaskAwaiter`1[TResult].GetResult () [0x00000] in <43dbbdc147f2482093d8409abb04c233>:0 
  at Microsoft.EntityFrameworkCore.RelationalDatabaseFacadeExtensions+<ExecuteSqlCommandAsync>d__13.MoveNext () [0x00154] in <e12f0cc891a249419803faaf433b12e6>:0 
--- End of stack trace from previous location where exception was thrown ---
  at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (System.Threading.Tasks.Task task) [0x0003e] in <43dbbdc147f2482093d8409abb04c233>:0 
  at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Threading.Tasks.Task task) [0x00028] in <43dbbdc147f2482093d8409abb04c233>:0 
  at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd (System.Threading.Tasks.Task task) [0x00008] in <43dbbdc147f2482093d8409abb04c233>:0 
  at System.Runtime.CompilerServices.TaskAwaiter`1[TResult].GetResult () [0x00000] in <43dbbdc147f2482093d8409abb04c233>:0 
  at MyXamarinTest.ExecuteCommand(FormattableString command)
Microsoft.Data.Sqlite.SqliteException(0x80004005):Sqlite错误1:“靠近“@p0”:语法错误”。
在Microsoft.Data.Sqlite.SqliteException.ThroweExceptionForRC(System.Int32 rc,SQLitePCL.sqlite3 db)[0x00067]中:0
在Microsoft.Data.Sqlite.SqliteCommand+d_u62.MoveNext()[0x0008a]中:0
位于:0中的Microsoft.Data.Sqlite.SqliteCommand.ExecuteReader(System.Data.CommandBehavior)[0x0025d]
位于:0中的Microsoft.Data.Sqlite.SqliteCommand.ExecuteReader()[0x00000]
位于:0中的Microsoft.Data.Sqlite.SqliteCommand.ExecuteOnQuery()[0x00042]处
在:0中的System.Data.Common.DbCommand.ExecuteOnQueryAsync(System.Threading.CancellationToken CancellationToken)[0x00049]处
---来自引发异常的上一个位置的堆栈结束跟踪---
0中的System.Runtime.CompilerServices.TaskWaiter.ThrowForNonSuccess(System.Threading.Tasks.Task任务)[0x0003e]处
0中的System.Runtime.CompilerServices.TaskWaiter.HandleNonSuccessAndDebuggerNotification(System.Threading.Tasks.Task任务)[0x00028]处
0中的System.Runtime.CompilerServices.TaskWaiter.ValidateEnd(System.Threading.Tasks.Task任务)[0x00008]处
位于System.Runtime.CompilerServices.TaskAwaiter`1[TResult].GetResult()[0x00000]的位置:0
在Microsoft.EntityFrameworkCore.Storage.Internal.RelationalCommand+d_u17.MoveNext()[0x00358]中:0
---来自引发异常的上一个位置的堆栈结束跟踪---
0中的System.Runtime.CompilerServices.TaskWaiter.ThrowForNonSuccess(System.Threading.Tasks.Task任务)[0x0003e]处
0中的System.Runtime.CompilerServices.TaskWaiter.HandleNonSuccessAndDebuggerNotification(System.Threading.Tasks.Task任务)[0x00028]处
0中的System.Runtime.CompilerServices.TaskWaiter.ValidateEnd(System.Threading.Tasks.Task任务)[0x00008]处
位于System.Runtime.CompilerServices.TaskAwaiter`1[TResult].GetResult()[0x00000]的位置:0
在Microsoft.EntityFrameworkCore.RelationalDatabaseFacadeExtensions+d_u13.MoveNext()[0x00154]中:0
---来自引发异常的上一个位置的堆栈结束跟踪---
0中的System.Runtime.CompilerServices.TaskWaiter.ThrowForNonSuccess(System.Threading.Tasks.Task任务)[0x0003e]处
0中的System.Runtime.CompilerServices.TaskWaiter.HandleNonSuccessAndDebuggerNotification(System.Threading.Tasks.Task任务)[0x00028]处
0中的System.Runtime.CompilerServices.TaskWaiter.ValidateEnd(System.Threading.Tasks.Task任务)[0x00008]处
位于System.Runtime.CompilerServices.TaskAwaiter`1[TResult].GetResult()[0x00000]的位置:0
在MyXamarinTest.ExecuteCommand(FormattableString命令)中

当我尝试使用Entity Framework Core在数据库中插入数据时,我做错了什么?

您是否可以包括创建“命令”的部分

说明:从堆栈上看,您的参数似乎地址错误。读取器尝试将每个参数配对以创建最终的SQL查询,但在一个名为@p0的查询中失败


免责声明:我还不能对你的问题发表评论(不过我知道这是最好的格式)。

你能把你创建的部分包括进来吗:“命令”

说明:从堆栈上看,您的参数似乎地址错误。读取器尝试将每个参数配对以创建最终的SQL查询,但在一个名为@p0的查询中失败


免责声明:我还不能对您的问题发表评论(但我知道这是最好的格式)。

问题在于
FormattableString
参数

当使用这种类型的字符串时,Entity Framework Core似乎试图替换插入字符串的变量,但无法使用无参数SQL字符串来替换,因此失败了


我将参数类型更改为
RawSqlString
,现在插入已完成。

问题在于
FormattableString
参数

当使用这种类型的字符串时,Entity Framework Core似乎试图替换插入字符串的变量,但无法使用无参数SQL字符串来替换,因此失败了


我将参数类型更改为
RawSqlString
,现在插入操作已经完成。

您的表是什么样子的?您的表是通过迁移创建的吗?我有点不明白为什么要使用SQL来实际插入?不使用
dbContext.Sections.Add(yourObj)dbContext.SaveChanges()的code>
@mvermef我只有一个MS-SQL插入脚本文本文件,我需要插入所有数据。创建对象太麻烦了。我用迁移创建了表,我想我知道了插入失败的原因。看来您的第一个属性
ID
有语法错误。您需要检查此属性的类型。@Nestor ID是自动插入的吗?您的表是什么样子的?您的表是通过迁移创建的吗?我有点不明白您为什么要使用SQL来实际插入?不使用
dbContext.Sections.Add(yourObj)dbContext.SaveChanges()的code>
@mvermef我只有一个MS-SQL插入脚本文本文件,我需要插入所有数据。创建对象太麻烦了。我用迁移创建了表,我想我知道了插入失败的原因。看来您的第一个属性
ID
有语法错误。您需要检查此属性的类型。@Nestor是否自动插入ID?