快疯掉了,sql server 2005数据库连接问题,100分求救
数据库名:C:\DOCUMENTS AND SETTINGS\ADMINISTRATOR\桌面\TOOLS\MYCHAT1.0\CHAT\APP_DATA\CHAT.MDF
结果出现这样的错误:
尝试为文件 C:\Documents and Settings\Administrator\桌面\tools\mychat1.0\Chat\app_data\chat.mdf 附加自动命名的数据库,但失败。已存在同名的数据库,或指定的文件无法打开或位于 UNC 共享目录中。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。
异常详细信息: System.Data.SqlClient.SqlException: 尝试为文件 C:\Documents and Settings\Administrator\桌面\tools\mychat1.0\Chat\app_data\chat.mdf 附加自动命名的数据库,但失败。已存在同名的数据库,或指定的文件无法打开或位于 UNC 共享目录中。
源错误:
行 27: SqlDataReader Reader;
行 28: if (Con.State != ConnectionState.Open)
行 29: Con.Open();//打开数据库连接 这里出现错误的代码。
行 30: SqlCommand Com = new SqlCommand(search, Con);
行 31: Reader = Com.ExecuteReader();//执行sql语句
是刚接触sql server 2005 和 VS2005,OS是vista
string path = @ "C:\Documents and Settings\Administrator\桌面\tools\mychat1.0\Chat ";
str = "Data Source=.\\SQLEXPRESS;AttachDbFilename=\ " " + path + "\\app_data\\chat.mdf\ ";Integrated Security=True;User Instance=True ";
在网上查了很多,问题还是依旧。好几个星期了,恨死这个几个字了,“附加自动命名的数据库,但失败。已存在同名的数据库,或指定的文件无法打开或位于 UNC 共享目录中。”
------解决方案--------------------ereryone设置写入权限
首选要确认已经为C分区以及C分区的子文件夹和文件分配了Users组的“读取”权限。如果问题仍然存在,请使用SQL Server Management Studio连接到SQLEXPRESS数据库实例,检查是否有名称是“Database”的数据库存在。如果有,分离同名数据库即可。
------解决方案--------------------附加自动命名的数据库,但失败。已存在同名的数据库,或指定的文件无法打开或位于 UNC 共享目录中。
是不是有同名的数据库?或更改数据库的文件名,逻辑名试试.
------解决方案--------------------不会是要附加的数据库文件在客户端,而连接用于附加的sql在另一台服务器上吧?
如果这样的话,肯定是不能附加成功的
------解决方案--------------------SqlConnectionStringBuilder的AttachDBFilename属性,对应connectionString中的AttachDBFilename,“AttachDBFilename”可以写成“extended properties”,“initial file name”。AttachDbFileName属性指定连接打开的时候动态附加到服务器上的数据库文件的位置。这个属性可以接受数据库的完整路径和相对路径(例如使用|DataDirectory|语法),在运行时这个路径会被应用程序的App_Data目录所代替。
_________________________________
我想到的解释是,每次要建立数据库连接时,由于上面属性要动态加载数据库;而你的数据库服务器上已经有上述同名数据库,使得每次Con.Open()建立连接出现
"附加自动命名的数据库,但失败。已存在同名的数据库,或指定的文件无法打开或位于 UNC 共享目录中。 "的错误.
修复问题的办法是修改连接字符串,直接指定database=chat,然后把指定的数据库文件.mdf附加到服务器即可.