使用C#中的SQL查询获取数据库驱动器盘符

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服务器和数据库名称的类,而myException是一个将异常写入日志文件的函数。我的问题是,无论我做什么,都会出现一个异常,说PrimaryFilePath从未设置过。我是做错了什么/漏掉了什么,还是这不是正确的方法?
编辑:抱歉,没有发布异常。 要执行此操作,请设置PrimaryFilePath属性。
3个回答

5

您可以在SQL Server内部对sys目录视图运行查询:

SELECT * FROM sys.master_files

这将列出数据库的id、逻辑名称和磁盘上的文件位置。

非常感谢,解决了我的问题。真不敢相信我错过了这么简单的方法哈哈。 - Jimmy

2

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

Database database = srv.Databases[dbName];

(当然,如果名称不存在,则需要进行错误处理)。
此外,你应该知道数据库可能由多个文件组成,这些文件可能在不同的驱动器上。

0
如果这是SQL Server,那么您可以使用。
SELECT * FROM sys.database_files

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接