黑马程序员技术交流社区

标题: ADO.net连接数据库问题 [打印本页]

作者: 吴春晟    时间: 2011-11-13 14:29
标题: ADO.net连接数据库问题
视频中 测试数据库连接是如下代码:
  1.         static void Main(string[] args)
  2.         {
  3.             string dataDir = AppDomain.CurrentDomain.BaseDirectory;
  4.             if (dataDir.EndsWith(@"\bin\Debug\") || dataDir.EndsWith(@"\bin\Release\"))
  5.             {
  6.                 dataDir = System.IO.Directory.GetParent(dataDir).Parent.Parent.FullName;
  7.                 AppDomain.CurrentDomain.SetData("DataDirectory", dataDir);
  8.             }

  9.            // SqlConnection conn = new SqlConnection(@"Data Source=.\SQLSERVER_WCS;AttachDbFilename="+dataDir+@"\Database1.mdf;Integrated Security=True;User Instance=True");
  10.             SqlConnection conn = new SqlConnection(@"Data Source=.\SQLSERVER_WCS;AttachDbFilename=|DataDirectory|\Database1.mdf;Integrated Security=True;User Instance=True");
  11.             conn.Open();
  12.             Console.WriteLine("打开数据库成功");
  13.             Console.ReadKey();
  14.         }
复制代码
请问其中AttachDbFilename=|DataDirectory|\Database1.mdf 中|DataDirectory|  为什么要这么用,(虽然我知道这个表示的是database.mdf所在的文件目录)



作者: 王绚文    时间: 2011-11-13 14:45
连接字符串 .NET 链接数据库的字符串可以有很多种不同的写法
这只是其中的一种而已!
作者: 夏雪锐    时间: 2011-11-13 20:09
具体参照老杨的解释:原理简单分析:连接字符串中的DataDirectory的值就是通过AppDomain.CurrentDomain.SetData赋值过去的,如果当前程序的目录以"\bin\Debug\"或者"\bin\Release\"则认为它是运行在VisualStudio环境中,就取项目的目录然后赋值给DataDirectory这个key。既然是CurrentDomain.SetData,估计对于非默认AppDomain中的数据库连接代码可能会不起作用(只是猜测,没验证),这就要需要创建子AppDomain的时候再去赋值了。

参照:http://www.rupeng.com/forum/thread-11988-1-1.html
作者: 朱陈伟    时间: 2011-11-16 00:16
链接字符串的写法有很多种,可以尝试下其他的写法哦。。。
作者: 高宜    时间: 2012-5-13 19:37
既然链接字符串有很多种,那么杨老师讲的这种连接字符串的好处体现在哪里了?
作者: 高宜    时间: 2012-5-13 19:47
本帖最后由 高宜 于 2012-5-13 19:49 编辑

通过监视看不到 DataDirectory这个变量,只能看到dataDir。那dataDir的值是通过什么原理传到DataDirectory中的了?
那么在帮助文件中“AppDomain..::.SetData 方法 :为应用程序域属性分配值。”表示的是什么意思了?




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2