我在使用SQLite和C#时遇到了麻烦。无论我把.db文件放在哪里,当我尝试打开它并创建表时,我都会收到错误"无法打开数据库文件"。
我首先要将它放在%appdata%
文件夹中,然后我尝试将其放在其他几个地方,例如userprofile
或local appdata
,即使在桌面上也只是为了查看它工作。错误仍然出现,所以我创建.db文件(.db文件是通过代码创建的)没有文件路径,以便将它放在调试文件夹中,并且错误没有显示。
所以,我不认为涉及权限,因为我甚至尝试使用桌面,我还尝试使用数据库浏览器打开创建的.db文件,看看它是否已损坏,并且它有效喜欢魅力。
问题是什么?提前感谢大家的帮助!
修改
以下是Connection String
和路径变量:
static string dbConnectionString = "Data Source=" + Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + @"\CSB_Ore\csb_ore.sqlite;";
string dbFilePath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + @"\CSB_Ore\csb_ore.sqlite";
string dbFolderPath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + @"\CSB_Ore";
以下是数据库创建的方法:
/// <summary>
/// Check if the database exists. If not, the database is created and also the CSB_Days table.
/// </summary>
public void FirstTimeExecution()
{
if(!Directory.Exists(dbFolderPath))
{
Directory.CreateDirectory(dbFolderPath);
File.Create(dbFilePath);
string tableCreationOutput = CreateTables();
if (tableCreationOutput == null)
{
MessageBox.Show("Tables successfully created.", "Info", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{
MessageBox.Show("Error while creating tables:\n\n" + tableCreationOutput, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
public string CreateTables()
{
string createDaysTableScript = "CREATE TABLE 'CSBO_Days' ("
+ "`ID` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,"
+ "`Date` datetime,"
+ "`Hours` decimal(2, 2),"
+ "`IsPartTime` bit,"
+ "`Notes` TEXT"
+ ")";
try
{
dbConnection.Open();
SQLiteCommand createTablesCommand = new SQLiteCommand(createDaysTableScript, dbConnection);
createTablesCommand.ExecuteNonQuery();
return null;
}
catch(SQLiteException ex)
{
return ex.ToString();
}
finally
{
dbConnection.Close();
}
}
}
我只是创建文件夹和.db文件以防它们不存在,然后我调用表创建方法并返回最终异常以查看表是否已创建。
编辑2 :
根据要求,这是dbConnectionString
之前的dbConnection.Open()
输出: