我有一个问题,当我想要创建数据库并指定其名称时,它是在指定的目录和运行应用程序的目录中创建的。为什么会发生这种情况?
创建数据库的代码:
using System.Data.SQLite;
...
private static string AddDb(string dbName, string dbPassword)
{
try
{
//default paths
string startupPath = Environment.CurrentDirectory;
string dataBasePath = startupPath + "\\DB\\" + dbName;
//creating the dbfile
SQLiteConnection.CreateFile(dataBasePath);
//Opening connection
SQLiteConnection dbConnString;
dbConnString = new SQLiteConnection("Data Source =" + dbName + ";Version=3;");
dbConnString.Open();
dbConnString.ChangePassword(dbPassword);
dbConnString.Close();
return dataBasePath;
}
catch
{
MessageBox.Show("Failed to create database", "DB Creator");
return "";
}
}
2条答案
按热度按时间7nbnzgx91#
问题似乎是您在
CreateFile
和您的连接字符串中使用了不同的路径。如果您查看下面的代码,您会注意到,在一种情况下,您使用完整路径来创建文件(
databaseBasePath
),而在另一种情况下,您只在连接字符串中使用数据库文件名(dbName
)。如果没有绝对路径,这可能是一个不同的文件夹!如果找不到文件,
Open
似乎会创建该文件。小路上的一句话:
1.不允许您编写
Program Files
文件夹,因此使用当前文件夹作为数据库文件确实不是一个好主意。1.使用
Environment.CurrentDirectory
也不是一个好主意。根据您启动应用程序的方式,这可能是您认为的文件夹,也可能不是(请参阅我对其他答案和this的评论)。1.切勿假设
\
实际上是路径分隔符。请改用Path.Combine
。我建议您使用
Environment.GetFolderPath
获取一个在所有用户之间共享的位置(如果数据库内容应该是共享的),或者是当前用户的私有位置(如果所有用户都应该有自己的数据库),并在那里创建数据库:yhived7q2#
Environment.CurrentDirectory包含默认情况下启动应用程序的目录。您可以设置此属性。请参阅MSDN文章Environment.CurrentDirectory Property