|DataDirectory| 解决Web.config中数据库连接的相对路径问题

简介: |DataDirectory| 解决Web.config中数据库连接的相对路径问题

1、业务背景

维护老系统代码,Web.config中数据库字符串连接的相对路径的处理

2、核心代码如下

<connectionStrings>
    <add name="connString" connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\FnDB.mdb" providerName="System.Data.OleDb"/>
</connectionStrings>

image.gif

|DataDirectory|会被自动解析到App_Data

image.gif

官方文档地址:对 |DataDirectory| 替代字符串和 Web 应用程序根目录运算符 (~) 的支持

3、注意事项

1)|DataDirectory|  仅能应指定在路径的开头,放在任何其他位置将得不到解析。 如 |DataDirectory|\FnDB.mdf被解析为 项目根目录\App_Data\FnDB.mdf,而\data\|DataDirectory| \FnDB.mdf 则视为物理路径,不会对|DataDirectory|做解析)

2)|DataDirectory| 在WebForm项目下默认为 项目根目录\App_Data文件夹,在Winform和控制台项目下,则为 项目根目录\bin\debug 或 项目根目录\bin\release 文件夹

对于Winform和控制台项目,一般使用AppDomain.CurrentDomain辅助类,即可以通过AppDomain.CurrentDomain.setData("DataDirectory","个人目录字符串") 来自定义|DataDirectory|的对应路径,接着去除掉debug模式和release模式的路径不同之处。此处需要注意的是,发布程序的时候,数据库也要放到App_Data目录下面,示例代码如下:

static void Main(string[] args) 
{
    string catalogue = AppDomain.CurrentDomain.BaseDirectory;
    if (catalogue.IndexOf("\\bin\\") > 0) {
        if (catalogue.EndsWith("\\bin\\Debug\\"))
            catalogue = catalogue.Replace("\\bin\\Debug", "");
        if (catalogue.EndsWith("\\bin\\Release\\"))
            catalogue = catalogue.Replace("\\bin\\Release", "");
    }
    if (!catalogue.EndsWith("App_Data\\"))
        catalogue = catalogue + "App_Data\\";
    AppDomain.CurrentDomain.SetData("DataDirectory", catalogue);
}

image.gif

亦或者如下代码:

static void Main(string[] args) {
    string catalogue = AppDomain.CurrentDomain.BaseDirectory;
    if(catalogue.EndsWith(@"\bin\Debug\") || catalogue.EndsWith(@"\bin\Release\"))
    {
        catalogue =  System.IO.Directory.GetParent(catalogue).Parent.Parent.FullName  +  "\\App_Data";  
        AppDomain.CurrentDomain.SetData("DataDirectory", catalogue);    
    }
}

image.gif

数据库连接配置文件与本项目Web.config配置完全相同,注意在WinForm中并不存在App_Data文件夹这个特殊文件夹,我们只需新建文件夹改名为App_Data,然后将数据库文件放入该文件夹即可。

若本文有帮助到阅读本文的同学,欢迎点赞、关注、收藏,互相学习交流。

目录
相关文章
|
2月前
|
存储 缓存 NoSQL
在Python Web开发过程中:数据库与缓存,Redis在Web开发中的常见应用场景有哪些?
Redis在Python Web开发中常用于缓存、会话管理、分布式锁、排行榜、消息队列和实时分析。作为内存数据存储,它提供高效的数据结构(如字符串、哈希、列表、集合、有序集合),支持会话存储、互斥操作、计数与排名、队列实现及实时数据处理。其高速性能和丰富功能使其成为多场景下的理想选择。
23 5
|
6月前
|
数据库
如何在web.config文件中配置连接Access数据库?
如何在web.config文件中配置连接Access数据库?
34 0
|
6月前
|
SQL 关系型数据库 MySQL
GO web 开发 实战三,数据库预处理
GO web 开发 实战三,数据库预处理
|
6月前
|
关系型数据库 MySQL Go
GO web 开发 实战二,数据库相关
GO web 开发 实战二,数据库相关
|
4月前
|
前端开发 数据库 Python
使用 Python 的 Web 框架(如 Django 或 Flask)来建立后端接口,用于处理用户的请求,从数据库中查找答案并返回给前端界面
【1月更文挑战第13天】使用 Python 的 Web 框架(如 Django 或 Flask)来建立后端接口,用于处理用户的请求,从数据库中查找答案并返回给前端界面
95 7
|
3天前
|
API 数据库 Python
Python web框架fastapi数据库操作ORM(二)增删改查逻辑实现方法
Python web框架fastapi数据库操作ORM(二)增删改查逻辑实现方法
|
3天前
|
关系型数据库 MySQL API
Python web框架fastapi数据库操作ORM(一)
Python web框架fastapi数据库操作ORM(一)
|
8天前
|
缓存 NoSQL 关系型数据库
在Python Web开发过程中:数据库与缓存,MySQL和NoSQL数据库的主要差异是什么?
MySQL与NoSQL的主要区别在于数据结构、查询语言和可扩展性。MySQL是关系型数据库,依赖预定义的数据表结构,使用SQL进行复杂查询,适合垂直扩展。而NoSQL提供灵活的存储方式(如JSON、哈希表),无统一查询语言,支持横向扩展,适用于处理大规模、非结构化数据和高并发场景。选择哪种取决于应用需求、数据模型及扩展策略。
20 0
|
8天前
|
SQL 缓存 数据库
在Python Web开发过程中:数据库与缓存,如何使用ORM(例如Django ORM)执行查询并优化查询性能?
在Python Web开发中,使用ORM如Django ORM能简化数据库操作。为了优化查询性能,可以:选择合适索引,避免N+1查询(利用`select_related`和`prefetch_related`),批量读取数据(`iterator()`),使用缓存,分页查询,适时使用原生SQL,优化数据库配置,定期优化数据库并监控性能。这些策略能提升响应速度和用户体验。
10 0
|
5月前
|
SQL 数据库 开发者
Python Web 开发: 什么是 Django ORM?如何使用它进行数据库操作?
Python Web 开发: 什么是 Django ORM?如何使用它进行数据库操作?

热门文章

最新文章