3

我试图找出数据库在服务器上的驱动器。更详细地说,该服务器上有一个服务器“MyServer”和三个数据库。数据库 A 和 B 位于该服务器的“C:\”驱动器上,数据库 C 位于“D:\”驱动器上。我想知道如何使用连接字符串来尝试获取驱动器号,以便当用户从应用程序中选择数据库时,它会告诉他们该数据库位于哪个驱动器上。

目前我正在尝试以下方法,但没有得到正确的响应:

Private void GetDriveLetter()
{
   string connectionString = String.Format(DatabaseInfo.CONNECTIONSTRING_TEMPLATE, dbName, server)
   try
   {
     using (SqlConnection cn = new SqlConnection(ConnectionString))
     {
       cn.Open();
       Server srv = new Server(new ServerConnection(cn));
       Database database = new Database(srv, dbName);
       txtDriveLetter.Text = database.PrimaryFilePath;
       cn.Close();
     }
    }
    catch (Exception ex)
    { 
      myException = ex.Message
    }
}

DatabaseInfo 只是我们用来读取 SQL Server 和数据库名称的一个类,而 myException 是一个将异常写入日志文件的函数。我遇到的问题是,无论我做什么,我都会收到一个异常,提示 PrimaryFilePath 从未设置。我做错了什么/错过了什么,或者这不是解决这个问题的正确方法?

编辑:抱歉从未发布异常要完成此操作,请设置属性 PrimaryFilePath。

4

3 回答 3

5

您始终可以对sysSQL Server 中的目录视图运行查询:

SELECT * FROM sys.master_files

这将列出您的数据库、它的id名称、它的逻辑名称以及文件在磁盘上的位置。

于 2012-09-28T14:33:50.430 回答
2

您可能应该访问现有的数据库,而不是构建一个新的:

Database database = srv.Databases[dbName];

(当然,如果名称不存在,则需要进行错误处理)。

此外,当然,您应该知道数据库可能包含多个文件,并且这些文件可能位于不同的驱动器上。

于 2012-09-28T14:33:54.503 回答
0

如果这是 SQL Server,那么您可以使用

SELECT * FROM sys.database_files

获取当前数据库的文件。因此,您的连接字符串应该将您连接到所需的数据库,然后上面的 SQL 将为您提供许多您可能会觉得有用的信息,包括physical_name. 从中您可以提取驱动器号。

于 2012-09-28T14:37:07.450 回答