C#-创建/删除数据库文件时,会持续抛出只读异常等



我正在尝试为sqlite数据库制作一个预加载C#程序。当我创建然后读取文件时,我会得到exeptions。当我删除并新建一个时,会出现异常。有人能告诉我我做错了什么吗?!

string dbPath = @"......TidesDatabaseAssetsDatabase.3db";
        bool exists = File.Exists (dbPath);
        if ( exists )
        {
            File.SetAttributes( dbPath, FileAttributes.Normal );
            File.Delete( dbPath );
            File.Create( dbPath );
            File.SetAttributes( dbPath, FileAttributes.Normal );
        }
        else
        {
            File.Create( dbPath );
            File.SetAttributes( dbPath, FileAttributes.Normal );
        }
        var db = new SQLiteConnection( dbPath );

最后一行是抛出异常的位置。

Stacktrace:

在c:\Users\Sgt.Waffles\Documents\Visual Studio 2013\Projects\TidesDatabase\Previloader\SqliteNet.cs:line 153中的SQLite.SQLiteConnection.ctor(字符串数据库路径,SQLiteOpenFlags打开标志,布尔存储日期时间AsTicks)在c:\Users\Sgt.Waffles\Documents\Visual Studio 2013\Projects\TidesDatabase\Preploader\SqliteNet.cs:line 114中的SQLite.SQLiteConnection.ctor(字符串数据库路径,布尔存储DateTimeAsTicks)位于c:\Users\Sgt.Waffles\Documents\Visual Studio 2013\Projects\TidesDatabase\Previloader\Program.cs:line 40中的Preloader.Program.Main(String[]args)位于System.AppDomain_nExecuteAssembly(RuntimeAssembly程序集,String[]参数)位于System.AppDomain.ExecuteAssembly(String assemblyFile,Evidence assemblySecurity,String[]args)位于Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()位于System.Threading.ThreadHelper.ThreadStart_Context(对象状态)位于System.Threading.ExecutionContext.RunInternal(ExecutionContext ExecutionContext,ContextCallback回调,对象状态,布尔值preserveSyncCtx)在System.Threading.ExecutionContext.Run(ExecutionContext ExecutionContext,ContextCallback回调,Object state,Boolean preserveSyncCtx)在System.Threading.ExecutionContext.Run(ExecutionContext ExecutionContext,ContextCallback回调,对象状态)在System.Threading.ThreadHelper.ThreadStart()

我认为您没有从这样的路径获取文件的权限。

要获得一个文件,你应该做:

string dbPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal),
    "Database.3db");

如果您已经有一个数据库文件,可以将其放在Assets文件夹中,然后可以使用Assets.Open()读取。

注意:我假设有问题的代码是1)在控制台应用程序中运行,而不是在移动操作系统上运行。2) 使用SQLiteNET(一种ORM)而不是直接使用SQLite。

问题似乎是您创建了一个空文件,然后期望sqlite将其作为数据库文件打开。如果数据库文件还不存在,您需要让sqlite创建它

string dbPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal), "Database.db3");
// If a db file doesn't exist, SQLite-Net will create it
var db = new SQLiteConnection (dbPath);

最新更新