在C#中使用SQL获取数据库';s驱动器号
我试图找出数据库在服务器上的哪个驱动器上。为了进一步说明,该服务器上有一个服务器“MyServer”和三个数据库。数据库A和B位于该服务器的“C:\”驱动器上,数据库C位于“D:\”驱动器上。我想知道如何使用连接字符串尝试获取驱动器号,以便当用户从应用程序中选择数据库时,它会告诉他们该数据库所在的驱动器 目前我正在尝试以下方法,但没有得到正确的响应:在C#中使用SQL获取数据库';s驱动器号,c#,sql-server,smo,C#,Sql Server,Smo,我试图找出数据库在服务器上的哪个驱动器上。为了进一步说明,该服务器上有一个服务器“MyServer”和三个数据库。数据库A和B位于该服务器的“C:\”驱动器上,数据库C位于“D:\”驱动器上。我想知道如何使用连接字符串尝试获取驱动器号,以便当用户从应用程序中选择数据库时,它会告诉他们该数据库所在的驱动器 目前我正在尝试以下方法,但没有得到正确的响应: Private void GetDriveLetter() { string connectionString = String.Forma
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。您始终可以对SQL Server中的
sys
目录视图运行查询:
SELECT * FROM sys.master_files
这将列出您的数据库、其id、逻辑名称以及文件在磁盘上的位置。您可能应该访问现有数据库,而不是构建新数据库:
Database database = srv.Databases[dbName];
(当然,如果名称不存在,则需要进行错误处理)
当然,您还应该知道,一个数据库可能由多个文件组成,这些文件可能位于不同的驱动器上。如果这是SQL Server,那么您可以使用
SELECT * FROM sys.database_files
获取当前数据库的文件。因此,您的连接字符串应该将您连接到所需的数据库,然后上面的SQL将为您提供许多有用的信息,包括
物理\u名称
。您可以从中提取驱动器号。非常感谢您的帮助,真不敢相信我错过了这么简单的方法,哈哈。