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

news2024/11/16 17:46:22

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>

|DataDirectory|会被自动解析到App_Data

官方文档地址:对 |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);
}

亦或者如下代码:

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);    
    }
}

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

 

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/700720.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Java】Java中的String类

文章目录 一、认识 String 类二、String 类的常用方法2.1 构造方法2.2 String 类对象之间的比较2.3 字符串查找2.4 字符串的转换2.5 字符串替换2.6 字符串拆分2.7 字符串截取2.8 字符串常量池2.9 字符串的不可变性 三、StringBuilder 和 StringBuffer3.1 StringBuilder3.2 Stri…

robotframework接口自动化测试详解

我们在使用rebotframework的时候&#xff0c;不只是能做UI自动化&#xff0c;接口自动化也是可以的。 那么这里就整理一下rebotframework_接口自动化的应用&#xff1a; 一、编写接口测试 由上图可知&#xff0c;该接口如下信息&#xff1a; 接口功能描述&#xff1a;预诊模…

Spring6快速入门

Spring6快速入门 各工具版本要求&#xff1a; JDK:Java17 Maven:3.6 Spring:6.0.9 简介 Spring是一个控制反转(IOC)&#xff0c;面向切面(AOP)编程的轻量级框架。 2002年&#xff0c;Rod Johnson首次推出Spring框架的雏形&#xff0c;interface21(https://interface21.io/) 200…

python爬虫-获取cookie实例小记

注意&#xff01;&#xff01;&#xff01;&#xff01;某XX网站逆向实例仅作为学习案例&#xff0c;禁止其他个人以及团体做谋利用途&#xff01;&#xff01;&#xff01; 第一步&#xff1a;请求拿到响应内容。并分析。 第二步&#xff1a;关键步骤分析(这部分参考的B站图灵…

2023 年互联网 Java 工程师高级面试八股文汇总(1260 道题目附解析)

今年的行情&#xff0c;让招聘面试变得雪上加霜。已经有不少大厂&#xff0c;如腾讯、字节跳动的招聘名额明显减少&#xff0c;面试门槛却一再拔高&#xff0c;如果不用心准备&#xff0c;很可能就被面试官怼得哑口无言&#xff0c;甚至失去了难得的机会。 现如今&#xff0c;…

concurrenthashmap原理

目录 一、Concurrent类型的容器 二、HashMap多线程死链问题 三、Concurrenthashmap8原理 1、构造器 2、get流程 3、put流程 4、initTable 5、addCount方法 6、size流程 四、Concurrenthashmap7原理 1、put流程 2、rehash扩容流程 3、get流程 一、Concurrent类型的…

如何选型低代码平台

编者按&#xff1a;近年来&#xff0c;在数字经济迅速发展的背景下&#xff0c;越来越多的企业开始建立健全业务系统&#xff0c;借助数字化工具提升管理效率。企业如何选自己合适的产品&#xff0c;本文从低代码定义&#xff0c;特点技术路线做了介绍。其中MyApps低代码平台拥…

git常用命令之tag

11. Tag 11.1 创建tag 命令作用轻量标签git tag v1.0基于本地当前分支最新commit创建tag v1.0git tag v.0325 125a1d1给指定commit 125a1d打标签附注标签git tag -a v.0329 -m "给标签添加说明" 125a1d1基于指定commit创建标签并添加说明git tag -a v.0329 -m &quo…

联邦学习中怎样对数据质量进行评估

目录 联邦学习中怎样对数据质量进行评估 联邦学习中怎么在不暴露数据的情况下&#xff0c;证明数据量条目数 联邦学习中怎样进行数据质量评估 联邦学习中怎样对数据质量进行评估 在联邦学习中&#xff0c;评估数据质量是至关重要的&#xff0c;因为数据质量直接影响到模型的…

Redis 简介与数据类型介绍

目录 ​编辑 一、Redis是什么&#xff1f; 二、redis五大基本类型 2.1 String(字符串) 2.1.1 应用场景 1&#xff09;缓存功能 2&#xff09;计数器 3&#xff09;统计多单位的数量 4&#xff09;共享用户session 2.2 List(列表) 2.2.1 应用场景 1&#xff09;消息队列 2…

07 redux的使用

总结 一.reduxjs/toolkit使用 1.1安装 安装&#xff1a; npm install reduxjs/toolkit在src目录中的store目录中的index.js中添加 1.2导入包中的对象 导入包中的对象 import { createSlice, configureStore } from reduxjs/toolkit1.3创建切片对象 创建切片对象 //这个…

霍夫变换车道线识别-车牌字符识别代码(matlab仿真与图像处理系列第5期)

1.车道线识别 当使用霍夫变换进行车道线识别时,可以按照以下步骤来编写 MATLAB 代码: 读入图像:使用imread函数读取包含车道线的图像。image = imread(lane_image.jpg);图像预处理:为了减少噪音和突出车道线,可以对图像进行预处理。通常,可以采用以下步骤:将图像转换为…

kafka入门,Kafka Broker工作流程、Broker重要参数(十一)

Zookeeper 存储的 Kafka 信息 在zookeeper的服务端存储的Kafka相关信息 1&#xff09;/kafka/brokers/ids [0,1,2] 记录有哪些服务器 2&#xff09;/kafka/brokers/topics/first/partitions/0/state 记录谁是leader,有哪些服务器可用 3&#xff09;/kafka/controller 辅助选举l…

Java中的「接口」到底是什么?

&#x1f482; 个人网站:【海拥】【游戏大全】【神级源码资源网】&#x1f91f; 前端学习课程&#xff1a;&#x1f449;【28个案例趣学前端】【400个JS面试题】&#x1f485; 寻找学习交流、摸鱼划水的小伙伴&#xff0c;请点击【摸鱼学习交流群】 目录 前言什么是接口接口的定…

浅浅的复习一下sql

DISTINCT 语法&#xff1a; SELECT DISTINCT 列名称 FROM 表名称1、现在有一个表如下&#xff1a; 2、执行sql语句-1 SELECT DISTINCT ename,email FROM emp 结果&#xff1a; 说明&#xff1a;由于小刘的ename和email重复了&#xff0c;所以结果只显示一次&#xff01; 3…

面试最爱问的浏览器的缓存机制问题

老规矩&#xff0c;想要了解学会一项技术&#xff0c;先从定义下手&#xff01; 浏览器的缓存的定义 浏览器的缓存是指浏览器在处理网络资源时&#xff0c;将这些资源存储在本地磁盘或内存中&#xff0c;并在后续的请求中重复使用这些缓存的资源。它旨在提高网页加载速度、减少…

AI画图——十二生肖

适当放下代码&#xff0c;有益身心健康。 AI绘画&#xff0c;码农必备&#xff0c;超解压。 多少没被和谐算多少~~~ 子鼠 丑牛 寅虎 卯兔 辰龙 巳蛇 午马 未羊 申猴 酉鸡 戌狗 亥猪

在期刊的参考文献中如何设置引用书中的一个章节

前言&#xff1a; 在bib文件中&#xff0c;使用book形式来引用书中的章节或文章。因为有些书籍是按照章节进行排列的&#xff0c;有些书籍收集了相关主题下的论文&#xff0c;当我们想要引用书中的要给章节或者书中的某篇文章的时候&#xff0c;我们该如何做呢&#xff1f; 下…

mysql不同隔离级别事务插入数据

文章目录 前言一、问题二、测试2.1.RR级别&#xff0c;mysql默认级别2.1.1 打开一个mysql窗口&#xff0c;事务A2.1.2 打开另一个窗口&#xff0c;事务B2.1.3 提交事务A&#xff0c;再看结果如下 2.2 READ-COMMITTED 级别下测试2.2.1修改数据库的my.ini文件修改隔离级别2.2.2 查…

国产MCU-CW32F030开发学习-OLED模块

国产MCU-CW32F030开发学习-OLED模块 硬件平台 CW32_48F大学计划板CW32_IOT_EVA物联网开发评估套件0.96 IIC oled模块 软件平台 Keil MDK 5.31IAR串口调试助手 IIC总线 处理器和芯片间的通信可以形象的比喻成两个人讲话&#xff1a;1、你说的别人得能听懂&#xff1a;双…