A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 颜晋南 中级黑马   /  2012-10-20 01:11  /  1765 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

今天看视频,视频里面的的链接语句是这样的

  1. using (SqlConnection conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Database1.mdf;Integrated Security=True;User Instance=True"))
复制代码
但是这样用,程序没效果,我改成绝对地址后:

  1. using (SqlConnection conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=e:\documents\visual studio 2010\Projects\exam2\test9\Database1.mdf;Integrated Security=True;User Instance=True"))
复制代码
后就正常了,有人知道什么问题吗?为什么=|DataDirectory| 不能用?

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

7 个回复

倒序浏览
抢沙发喽。
回复 使用道具 举报
数据库连接字符串不是应该写在配置文件的么?据说那样的话更合理。。。。。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
康子龙 发表于 2012-10-20 03:33
数据库连接字符串不是应该写在配置文件的么?据说那样的话更合理。。。。。 ...

没错,但是首先要能用。写在源代码方便调试,如果可以用的话,在按照视频里面说的,放在 配置文件。不然到时候出问题,都不知道哪里问题。
回复 使用道具 举报

AttachDbFilename改成database或integrated Security
在配置文件中添加下面代码
<connectionStrings>
    <add name="Connection" connectionString="Server=(local)\SqlExpress; Database=Database1; Integrated Security=True" providerName="System.Data.SqlClient" />
  </connectionStrings>

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
你必须在程序的Main函数中加入如下代码:(关于这段代码的详细说明,请参看杨中科老师的解释文章;加入这段代码后程序就可以正常运行了)
string dataDir = AppDomain.CurrentDomain.BaseDirectory;
            if (dataDir.EndsWith(@"\bin\Debug\")
                || dataDir.EndsWith(@"\bin\Release\"))
            {
                dataDir = System.IO.Directory.GetParent(dataDir).Parent.Parent.FullName;
                AppDomain.CurrentDomain.SetData("DataDirectory", dataDir);
            }
文章地址:http://www.rupeng.com/forum/thread-11988-1-1.html.(求给分啊!原理其实不难,只是我说不够清楚)

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Database1.mdf;Integrated Security=True;User Instance=True"中“|DataDirectory”必须放配置文件中才能识别为相对路径。
你写的是硬编码在程序中,程序认为是一个字符,无法识别为相对路径。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
奇葩,怎么我的就行?可不可以将错图提示截图看看?

说说我 的看法:
DataDirectory 是表示数据库路径的替换字符串,由于无需对完整路径进行硬编码,DataDirectory 简化了项目的共享和应用程序的部署;
使用 DataDirectory 时,目录结构中的结果文件的路径不能高于替代字符串指向的目录,即结果文件必须是DataDirectory所指向的目录的子孙文件,否则产生异常。
那么很有可能就是你这里的DataDirectory指的并不是e:\documents\visual studio 2010\Projects\exam2\test9,而是e:\documents之类的,此时目录结构中的结果文件的路径就高于替代字符串指向的目录了,则报错。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马