我是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();
}
当我运行此程序时,我没有收到任何错误。但是我的新记录没有插入表中。我的代码有什么问题。请帮帮我。
答案 0 :(得分:4)
这是一个常见的陷阱。服务器资源管理器中的连接构建到存储在项目文件夹中的数据库文件。然后,在运行时,数据库将复制到输出目录,每次插入,更新,删除都将对该数据库起作用。在Server Explorer中没有任何更改,因为数据库不同。如果属性'Copy to the output directory'
设置为Copy always
,也会发生同样的情况。在这种情况下,每次运行时,输出目录中的数据库都会被从项目根文件夹中获取的新副本覆盖,并且每次删除,更新或插入时都会在下次运行时消失。
答案 1 :(得分:0)
为什么你认为“没有插入新记录”? ExecuteNonQuery
会告诉您有多少记录受到影响;它返回了什么?
你是如何运行该程序的?从调试器? DataDirectory
是数据安装到的文件夹。如果您未在.sdf文件项目属性中更改某些内容,Visual Studio会将数据安装到project \ debug \ bin \文件夹中。在那里寻找.sdf文件,那是你的“新记录”吗?
答案 2 :(得分: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