Sqlite c#创建两个同名数据库
我有一个问题,当我想要创建数据库并指定其名称时,它是在指定的目录和应用程序运行的目录中创建的。为什么会这样 创建数据库的代码:Sqlite c#创建两个同名数据库,c#,wpf,sqlite,C#,Wpf,Sqlite,我有一个问题,当我想要创建数据库并指定其名称时,它是在指定的目录和应用程序运行的目录中创建的。为什么会这样 创建数据库的代码: private static string AddDb(string dbName, string dbPassword) { try { string startupPath = Environment.CurrentDirectory; string dataBasePa
private static string AddDb(string dbName, string dbPassword)
{
try
{
string startupPath = Environment.CurrentDirectory;
string dataBasePath = startupPath + "\\DB\\" + dbName;
SQLiteConnection.CreateFile(dataBasePath);
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 "";
}
}
Environment.CurrentDirectory包含应用程序默认启动的目录。您可以设置此属性。请参阅MSDN文章问题似乎是您在
CreateFile
和连接字符串中使用了不同的路径
如果查看下面的代码,您会注意到,在一种情况下,您使用完整路径创建文件(databasepath
),而在另一种情况下,您只在连接字符串中使用数据库文件名(dbName
)。如果没有绝对路径,这可能是另一个文件夹
string dataBasePath = startupPath + "\\DB\\" + dbName;
SQLiteConnection.CreateFile(dataBasePath);
SQLiteConnection dbConnString;
dbConnString = new SQLiteConnection("Data Source =" + dbName + ";Version=3;");
似乎是Open
然后在找不到文件时创建文件
路径上的一个词:
程序文件
文件夹,因此将当前文件夹用于数据库文件确实是个坏主意Environment.CurrentDirectory
也是一个坏主意。根据您启动应用程序的方式,此文件夹可能是您认为的文件夹,也可能不是(请参阅我对其他答案和答案的评论)\
实际上是路径分隔符。使用路径。合并路径string baseFolder = Environment.GetFolderPath(<wherever it should be>);
string dataBasePath = Path.Combine(baseFolder, "DB", dbName);
SQLiteConnection.CreateFile(dataBasePath);
SQLiteConnection dbConnString = new SQLiteConnection(String.Format("Data Source = {0};Version=3;", dataBasePath);
string baseFolder=Environment.GetFolderPath();
字符串dataBasePath=Path.Combine(baseFolder,“DB”,dbName);
SQLiteConnection.CreateFile(数据库路径);
SQLiteConnection dbConnString=新的SQLiteConnection(String.Format(“数据源={0};版本=3;”,数据库路径);
同样错误。它并不总是包含应用程序启动的目录,而是当前的工作目录,这是非常不同的。请参见“是”,它确实包含。如果您创建一个简单的应用程序来打印它,它会输出应用程序启动的目录。他使用的是环境类而不是目录类。您还可以更改Environment.CurrentDirectory。至少在框架4.5.2和4.6.1中是这样。他可能在没有意识到的情况下更改了它吗?如果你创建了一个简单应用程序的快捷方式,并指定了一个不同的工作目录,那么它不会。文档中还谈到了工作目录。尽管如此,安装到程序文件中的应用程序无论如何都不允许lder在那里写入,因此OP应该使用正确的位置。似乎此调用正在exe目录dbConnString.Open()中创建sqlite文件;