桌面应用程序部署-尝试编写只读数据库sqlite

问题描述 投票:3回答:3

我使用C#VS2013和SQLite数据库创建了一个小型的Desktop [WinForm]数据插入应用程序。它工作正常,并且所有CURD操作都正常。但是,当我使用高级安装程序创建此应用程序的安装程序时。然后,每当我运行该应用程序并尝试插入数据时,都会弹出此屏幕

This is The Error I Got.

和谢谢..

这里是一些代码段。

//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%工作代码。但仅当我创建应用程序的安装程序时才会生成错误

c# sqlite desktop-application
3个回答
2
投票

技术错误不在SQLite数据库中。但这是文件夹错误。我正在为数据库文件创建Sub文件夹,它没有作为Local Output文件夹的权限。因此,我只是将数据库移至工作正常的Main BIN文件夹中::-)

这里是我找到解决方案的链接。SQLite for Windows Runtime is returning an "ReadOnly" error SQLiteException object

-重要-

如果遇到这样的问题,请尝试将数据库文件的目录更改为主输出目录。


0
投票

将您的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();   

0
投票

(也许有点晚...)

© www.soinside.com 2019 - 2024. All rights reserved.