none
关于连接数据库的绝对路径和相对路径 RRS feed

  • 问题

  • 主程序绝对路径为:D:\Program Files\企业业务资料管理系统\mai.exe

    数据库绝对路径为:D:\Program Files\企业业务资料管理系统\database\Database.mdf

    我使用 

    SqlConnection con = new SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename=D:\\Program Files\\企业业务资料管理系统\\database\\Database.mdf; Integrated Security=True;User Instance=True");
    
    
    

    一切正常,

    但是使用

     SqlConnection con = new SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename=.\\database\\Database1.mdf;Integrated Security=True;User Instance=True");
    
    

    就报错误,在con.open();

    尝试为文件 .\database\Database1.mdf 附加自动命名的数据库,但失败。已存在同名的数据库,或指定的文件无法打开或位于 UNC 共享目录中。


    共工之臣曰相柳氏,九首,以食于九山。相柳之所抵,厥为泽溪。禹杀相柳,其血腥,不可以树五谷种。禹厥之,三仞三沮,乃以为众帝之台。
    2011年2月8日 1:20

答案

  • 您好,\\是UNC路径,是访问共享文件夹的语法。如果想表达您的原意。需要获取当前程序的路径然后拼接字符串。可以通过来AppDomain.CurrentDomain.BaseDirectory来获取程序的当前路径。

    例如:

    "Data Source=.\\SQLEXPRESS;AttachDbFilename=" + 
    AppDomain.CurrentDomain.BaseDirectory +"
    \\database\\Database1.mdf......
    ";
    
    • 已标记为答案 相柳 2011年2月8日 13:07
    2011年2月8日 8:59
    版主
  • 您好,\\其中第一个\是转译符。

    String a = "\\"; 与 String a = @"\";是等效的。

    那么问题可能出现在.符号上,您的问题中是 ".\\" ,您改为"..\\" 带两个..的试试,这样与 @"..\"等效。

    • 已标记为答案 相柳 2011年2月8日 13:07
    2011年2月8日 10:18
    版主

全部回复

  • 您好,\\是UNC路径,是访问共享文件夹的语法。如果想表达您的原意。需要获取当前程序的路径然后拼接字符串。可以通过来AppDomain.CurrentDomain.BaseDirectory来获取程序的当前路径。

    例如:

    "Data Source=.\\SQLEXPRESS;AttachDbFilename=" + 
    AppDomain.CurrentDomain.BaseDirectory +"
    \\database\\Database1.mdf......
    ";
    
    • 已标记为答案 相柳 2011年2月8日 13:07
    2011年2月8日 8:59
    版主
  • 你好,感谢你的回复。

    我就是这样做的,不过比你麻烦一些

          add = System.Windows.Forms.Application.ExecutablePath;//获取程序启动路径
          max = add.Length - add.LastIndexOf("\\")-1;//获取最后一个“\”之后还有几位
          str = add.Substring(add.LastIndexOf('\\') + 1, max);//截取最后一个“\”之后的字符串
          add = add.Replace(str, "database\\Database1.mdf");//替换字符串
          return add;
    

    你的意思是不是,用\\访问database本身就是错误的?是用错了方法?

          //System.Data.OleDb.OleDbConnection objConn = new System.Data.OleDb.OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=excell.xls;Extended Properties=Excel 8.0;");
          System.Data.OleDb.OleDbConnection objConn = new System.Data.OleDb.OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=..\excell.xls;Extended Properties=Excel 8.0;");
    
    

    这两句都可以啊。

    谢谢


    共工之臣曰相柳氏,九首,以食于九山。相柳之所抵,厥为泽溪。禹杀相柳,其血腥,不可以树五谷种。禹厥之,三仞三沮,乃以为众帝之台。
    2011年2月8日 9:15
  • 您好,\\其中第一个\是转译符。

    String a = "\\"; 与 String a = @"\";是等效的。

    那么问题可能出现在.符号上,您的问题中是 ".\\" ,您改为"..\\" 带两个..的试试,这样与 @"..\"等效。

    • 已标记为答案 相柳 2011年2月8日 13:07
    2011年2月8日 10:18
    版主
  • 感谢你的回复。


    共工之臣曰相柳氏,九首,以食于九山。相柳之所抵,厥为泽溪。禹杀相柳,其血腥,不可以树五谷种。禹厥之,三仞三沮,乃以为众帝之台。
    2011年2月8日 13:07