c# SQlite INSERT INTO不能工作

本文关键字:不能 工作 INTO INSERT SQlite | 更新日期: 2023-09-27 18:04:53

我是SQLite的初学者。现在我正试图在样本北风数据库中插入新的记录。我的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();
        }

当我运行这个程序,我没有得到任何错误。但是我的新记录没有插入到表中。我的代码有什么问题。

c# SQlite INSERT INTO不能工作

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

为什么你认为"新记录没有插入"?ExecuteNonQuery会告诉你有多少记录受到了影响;它返回什么?

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

尝试这样编码,它总是检查连接是否有错误或您的查询有错误。

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