使用System.Data.SQLite,如何在连接字符串中指定一个相对路径的数据库文件?

12

我希望在不同的服务器上部署我的项目,我更喜欢能够使用相对路径指定连接字符串。但是似乎无法使用相对路径,请问是否有什么窍门可以解决这个问题?

3个回答

7

建议

您可以在应用程序中构建绝对路径,并将其传递给连接字符串。

因此,如果您知道数据库文件位于应用程序文件夹的database子文件夹中,您可以执行类似以下内容的操作(C#):

    string relativePath = @"database\myfile.s3db";
    string currentPath;
    string absolutePath;
    string connectionString;

    currentPath = System.Reflection.Assembly.GetExecutingAssembly().Location;
    absolutePath = System.IO.Path.Combine(currentPath,relativePath);

    connectionString = string.Format("DataSource={0}", absolutePath);

    SQLiteConnection cnn = new SQLiteConnection(connectionString);

(可能有人可以纠正我如何获取当前路径)。


3
别用反射命名空间获取基础路径,使用:AppDomain.CurrentDomain.BaseDirectory - Kind Contributor

6
这个怎么样?
"Data Source=|DataDirectory|mydb.db;..."

我相信|DataDirectory|指向你的应用程序所在的目录。我使用NHibernate,并且它与以下内容一起工作:
<add key="hibernate.connection.connection_string"
       value="Data Source=|DataDirectory|mydb.db;Version=3;Compress=False;synchronous=OFF;" >

这是正确的方法,但它不支持设计时。也就是说,在调试和发布模式下,您的程序可以正常工作,但在尝试编辑数据集定义时,它会崩溃并显示“无法连接到数据库”的错误信息。这是SQLite中已知的一个bug。 - Karl

2
像这样:

字符串 currentPath = System.IO.Path.GetDirectoryName( Application.ExecutablePath );

这段代码是获取当前应用程序的路径。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接