3

我是 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();
        }

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

4

3 回答 3

5

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

于 2013-03-20T23:07:51.710 回答
0

为什么你认为“没有插入新记录”?ExecuteNonQuery将告诉您有多少记录受到影响;它返回什么?

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

于 2013-03-20T23:06:12.280 回答
0

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

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
于 2017-09-17T12:38:38.543 回答