我正在使用本地数据库,由于某种原因,当我使用时|DataDirectory|
,添加/删除时数据库不会更新
SqlConnection conn = new SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\HomeDB.mdf;Integrated Security=True");
SqlDataAdapter da = new SqlDataAdapter();
DataTable dt = new DataTable();
DataSet ds = new DataSet();
但是, 如果我使用以下目录,它确实可以工作
SqlConnection conn = new SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=F:\Project\Home_Database\HomeDB.mdf;Integrated Security=True");
SqlDataAdapter da = new SqlDataAdapter();
DataTable dt = new DataTable();
DataSet ds = new DataSet();
有人知道为什么吗?
|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
文件定位bin\Debug
在项目目录下的文件夹中,该目录基本上是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
位于bin\Debug
或bin\Release
文件夹中的文件,并在其中进行更改,同时您F:\Project\Home_Database\HomeDB.mdf
要验证更改。
您没有看到我看到的错误,因为在构建项目时将.mdf文件复制到可执行位置。
因此,解决您的问题的方法是更改|DataDirectory|
usingAppDomain.CurrentDomain.SetData("DataDirectory",<<yourvalue>>);
方法的值。
编辑:
如果.mdf
文件的位置相对于项目的可执行文件是固定的,则可以|DataDirectory|
在运行时构建值并进行分配。
假设您的文件夹Database
与exe
andDatabase
文件夹位于同一位置HomeDB.mdf
。因此,首先您需要找到exe
运行的路径并将其追加Database
到并将其分配给|DataDirectory|
。
//Get the current path from where the exe is running.
var currentDirectory = AppDomain.CurrentDomain.BaseDirectory;
//Build path to Database folder
var databasePath = currentDirectory + "Database";
//Assign it to DataDirectory
AppDomain.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
文件,它就会起作用。
编辑结束
您可能还需要考虑将连接字符串放在配置文件中,而不是将其硬编码到代码本身中。
我希望我能够清楚地解释这一点,这将有助于您解决问题。
我在XCode中编写了一个方法,在firebase实时数据库中保存“用户”。不幸的是,数据没有显示在我的浏览器中的实时数据库中,尽管我通过内置的打印命令从Xcode得到了反馈,一切都很顺利。有人知道吗?我真的很高兴听到你的消息。最美好的祝福 PS:是的:读取和写入在我的数据库规则中被激活。
本文向大家介绍c# DataDirectory的用法,包括了c# DataDirectory的用法的使用技巧和注意事项,需要的朋友参考一下 笔者在使用Entity Framework中的Scaffolding机制自动创建拓展名为mdf的数据库及表单时,遇到如下的错误: A file activation error occurred. The physical file name '\\Music
问题内容: 我在C#/ Visual Studio 2008中使用MySQL。我需要知道任何方法,以便如果一个用户更新数据库,则通过网络通知所有已登录用户已发生更改。如果我通过我的应用程序登录数据库,那时候数据库中最新记录的序列号是10,然后我有特权的人更新了数据库中的记录,同时我收到通知,数据库已更新为新记录。常见的例子可能是MSN Messenger的一个朋友上线时向他发出警报的提示……虽然我
我正在获取一个-无法更新Activiti数据库架构:来自数据库“5.20.0.1”的未知版本?知道为什么会出现这个错误吗?我使用的是Activiti-Engine-5.18.0 jar 我正在尝试使用Eclipse在Alfresco Activiti之外部署一个进程。
问题内容: TL DR;想要一些Java帮助来连接到真正的本地数据库(不能访问服务器技术),或者如果您可以编写代码,那将是可行的。它要做的就是查询数据库(尽管可以更改MS Access),然后输出JSON字符串。请参阅EDIT2了解更多信息。 编辑:在任何人说JDBC之前;我浏览了这些教程(开始深入阅读),但是其中大多数似乎是针对服务器技术的,我无法访问这些技术。 EDIT2:到目前为止,似乎大多
我有两个docker容器在运行,遵循这里给出的说明:https://github.com/swri-robotics/bag-database。 现在我可以在浏览器中使用:localhost:8080查看数据库,因此它设置正确,运行良好。 我是这样运行的: docker运行-d-p 5432:5432--name bagdb-postgres-v/var/lib/bagdb-postgres:/v