栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

|| DataDirectory |时,C#本地数据库未更新

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

|| DataDirectory |时,C#本地数据库未更新

|DataDirectory|
变量具有基于OS的.NET framework设置的值。

我对此做了一个快速实验。

class Program{    static void Main(string[] args)    {        var dataDirectory = AppDomain.CurrentDomain.GetData("DataDirectory");        Console.WriteLine(dataDirectory);        Console.ReadKey();    }}

当我运行上面的代码时,它什么也没显示。调试后,我发现该

dataDirectory
变量具有值
null

然后,我尝试使用它来创建数据库连接并打开它。

 SqlConnection conn = new SqlConnection(@"Data Source=.;AttachDbFilename=|DataDirectory|HomeDB.mdf;Integrated Security=True"); conn.Open();

此代码失败,

conn.Open();
并出现以下错误。

尝试为文件D: Chetan Sandbox consoleapp1 ConsoleApp1 bin Debug
HomeDB.mdf附加自动命名的数据库失败。存在具有相同名称的数据库,或者无法打开指定的文件,或者该数据库位于UNC共享上。

从错误中可以看到,由于’

|DataDirectory|
为null,应用程序尝试将
.mdf
文件定位
binDebug
在项目目录下的文件夹中,该目录基本上是exe运行的位置。

因此,如果您希望

|DataDirectory|
具有不同的值,则首先需要对其进行更改,然后再使用它。如下。

class Program{    static void Main(string[] args)    {        var dataDirectory = AppDomain.CurrentDomain.GetData("DataDirectory");        //Changing DataDirectory value.        AppDomain.CurrentDomain.SetData("DataDirectory", "C:\DataFiles");        Console.WriteLine(dataDirectory);        SqlConnection conn = new SqlConnection(@"Data Source=.;AttachDbFilename=|DataDirectory|HomeDB.mdf;Integrated Security=True");        conn.Open();        Console.ReadKey();    }}

通过此代码,我注意到该值

"C:\DataFiles"
用于定位
HomeDB.mdf

如果您阅读此内容,则会说明的值

|DataDirectory|
扩展的顺序。

这说明了如何自定义的值

|DataDirectory|

现在,您的数据问题没有得到反映。

在您的情况下,

|DataDirectory|
其值为null,因此它正在连接到
HomeDB.mdf
位于
binDebug
binRelease
文件夹中的文件,并在其中进行更改,同时您
F:ProjectHome_DatabaseHomeDB.mdf
要验证更改。

您没有看到我看到的错误,因为在构建项目时将.mdf文件复制到可执行位置。

因此,解决您的问题的方法是更改

|DataDirectory|
using
AppDomain.CurrentDomain.SetData("DataDirectory",<<yourvalue>>);
方法的值。

编辑:

如果

.mdf
文件的位置相对于项目的可执行文件是固定的,则可以
|DataDirectory|
在运行时构建值并进行分配。

假设您的文件夹

Database
exe
and
Database
文件夹位于同一位置
HomeDB.mdf
。因此,首先您需要找到
exe
运行的路径并将其追加
Database
到并将其分配给
|DataDirectory|

//Get the current path from where the exe is running.var currentDirectory = AppDomain.CurrentDomain.baseDirectory;//Build path to Database foldervar databasePath = currentDirectory + "Database";//Assign it to DataDirectoryAppDomain.CurrentDomain.SetData("DataDirectory", databasePath);var dataDirectory = AppDomain.CurrentDomain.GetData("DataDirectory");Console.WriteLine(dataDirectory);//Use DataDirectory to SQL Connection.SqlConnection conn = new SqlConnection(@"Data Source=.;AttachDbFilename=|DataDirectory|HomeDB.mdf;Integrated Security=True");conn.Open();

无论从何处运行应用程序,这都将毫无问题地起作用。只要您在该文件夹中有

Database
文件夹和
HomeDB.mdf
文件,它就会起作用。

编辑结束

您可能还需要考虑将连接字符串放在配置文件中,而不是将其硬编码到代码本身中。

我希望我能够清楚地解释这一点,这将有助于您解决问题。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/420175.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号