我使用C#VS2013和SQLite数据库创建了一个小型的Desktop [WinForm]数据插入应用程序。它工作正常,并且所有CURD操作都正常。但是,当我使用高级安装程序创建此应用程序的安装程序时。然后,每当我运行该应用程序并尝试插入数据时,都会弹出此屏幕
和谢谢..
这里是一些代码段。
//Add Property Function.
string ConnectionString = "Data Source=database/MyProperty.db;Version=3;Read Only=False";
public static long AddPropertyToDatabae( Property property )
{
SQLiteConnection con = new SQLiteConnection( ConnectionString );
SQLiteCommand cmd = new SQLiteCommand
{
Connection = con,
CommandText =
"INSERT INTO Properties (PropertyName,PropertyAddress,PropertyCity,PropertyState,PropertyZip,PropertyNotes)" +
" values (@Name,@Address,@City,@State,@Zip,@Notes)"
};
cmd.Parameters.AddWithValue( "@Name", property.PropertyName );
cmd.Parameters.AddWithValue( "@Address", property.PropertyAddress );
cmd.Parameters.AddWithValue( "@City", property.PropertyCity );
cmd.Parameters.AddWithValue( "@State", property.PropertyState );
cmd.Parameters.AddWithValue( "@Zip", property.PropertyZip );
cmd.Parameters.AddWithValue( "@Notes", property.PropertyNotes );
con.Open();
cmd.ExecuteNonQuery();
// Get the Last Inserted RowId.
cmd.CommandText = "select last_insert_rowid()";
long rowid = ( long )cmd.ExecuteScalar();
con.Close();
return rowid;
}
注
这是VS上的100%工作代码。但仅当我创建应用程序的安装程序时才会生成错误
技术错误不在SQLite数据库中。但这是文件夹错误。我正在为数据库文件创建Sub文件夹,它没有作为Local Output文件夹的权限。因此,我只是将数据库移至工作正常的Main BIN文件夹中::-)
这里是我找到解决方案的链接。SQLite for Windows Runtime is returning an "ReadOnly" error SQLiteException object
-重要-
如果遇到这样的问题,请尝试将数据库文件的目录更改为主输出目录。
将您的Sql Command更改为以下命令,这样您不必运行2个单独的sql命令,就无法保证如果2个人同时点击该代码并插入,您将获得正确的最后插入的行。我将需要查看安装程序代码以查看在那里可能发生的情况。
"INSERT INTO Properties (PropertyName,PropertyAddress,PropertyCity,PropertyState,PropertyZip,PropertyNotes)" +
" values (@Name,@Address,@City,@State,@Zip,@Notes)SELECT CAST(scope_identity() AS int)";
rowid = (int)cmd.ExecuteScalar();
(也许有点晚...)