Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.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插入不起作用_C#_Database_Sqlite - Fatal编程技术网

C#SQlite插入不起作用

C#SQlite插入不起作用,c#,database,sqlite,C#,Database,Sqlite,我是SQLite的初学者。现在我正试图在样本northwind数据库中插入新记录。我的C#代码如下: SQLiteConnection myConnection = new SQLiteConnection(); myConnection.ConnectionString = @"Data Source=|DataDirectory|\northwindEF.db"; using (myConnection) {

我是SQLite的初学者。现在我正试图在样本northwind数据库中插入新记录。我的C#代码如下:

       SQLiteConnection myConnection = new SQLiteConnection();

        myConnection.ConnectionString = @"Data Source=|DataDirectory|\northwindEF.db";

        using (myConnection)
        {
            SQLiteCommand myCommand = myConnection.CreateCommand();
            myCommand.CommandText = "INSERT INTO Categories(CategoryID,CategoryName,Description) VALUES(11,'Bakery','Baked goods such as bread and cakes')";
            myConnection.Open();
            myCommand.ExecuteNonQuery();
            myConnection.Close();
        }
当我运行这个程序时,我没有得到任何错误。但我的新记录并没有插入到表中。我的代码怎么了。请帮帮我。

为什么您认为“新记录未插入”
ExecuteNonQuery
将告诉您有多少记录受到影响;它的回报是什么


你是如何运行这个程序的?从调试器
DataDirectory
是安装数据的文件夹。如果未更改.sdf文件项目属性中的某些内容,Visual Studio会将数据安装到project\debug\bin\文件夹中。在那里查找.sdf文件,你的“新记录”在那里吗?

这是一个常见的陷阱。将在服务器资源管理器中建立与存储在项目文件夹中的数据库文件的连接。然后,在运行时将数据库复制到输出目录,并且每次插入、更新和删除都会针对该数据库工作。在服务器资源管理器中,没有任何更改,因为数据库不同。如果属性
'Copy to output directory'
设置为
Copy always
,也会发生同样的情况。在这种情况下,每次运行时,输出目录中的数据库都会被从项目根文件夹中获取的新副本覆盖,并且每次删除、更新或插入都会在下次运行时消失。

尝试这样编码,始终会检查连接是否有错误或查询是否有错误

using (SQLiteConnection con = new SQLiteConnection { ConnectionString = "connectionstring" })
{
     using(SQLiteCommand cmd = new SQLiteCommand { Connection = con })
     {
         // check connection state if open then close, else close proceed
         if(con.State == ConnectionState.Open)
           con.Close();

         //then
         try
         {
            // try connection to Open
            con.Open();
         }
         catch
         {
            // catch connection error.
         }

         try
         {
             // your insert query
         }
         catch
         {
             // catch query error
         }

     } // Close Command

}  // Close Connection

我不确定,但如果CategoryId是主键,请将查询更改为:“插入类别(CategoryName,Description)值('Bakery','Baked goods,如面包和蛋糕')”CategoryId是主键。正如您所说,我更改了我的查询,但问题仍然存在-(SQLiteCommand可能要求CommandText属性以分号终止。分号无法解决我的问题。我该怎么办?:-(项目文件中是否列出了数据库文件?如果列出了,属性“复制到输出目录”的值是多少?连接字符串是什么?