Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C#中使用SQL获取数据库';s驱动器号_C#_Sql Server_Smo - Fatal编程技术网

在C#中使用SQL获取数据库';s驱动器号

在C#中使用SQL获取数据库';s驱动器号,c#,sql-server,smo,C#,Sql Server,Smo,我试图找出数据库在服务器上的哪个驱动器上。为了进一步说明,该服务器上有一个服务器“MyServer”和三个数据库。数据库A和B位于该服务器的“C:\”驱动器上,数据库C位于“D:\”驱动器上。我想知道如何使用连接字符串尝试获取驱动器号,以便当用户从应用程序中选择数据库时,它会告诉他们该数据库所在的驱动器 目前我正在尝试以下方法,但没有得到正确的响应: Private void GetDriveLetter() { string connectionString = String.Forma

我试图找出数据库在服务器上的哪个驱动器上。为了进一步说明,该服务器上有一个服务器“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。

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

SELECT * FROM sys.master_files

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

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

Database database = srv.Databases[dbName];
(当然,如果名称不存在,则需要进行错误处理)


当然,您还应该知道,一个数据库可能由多个文件组成,这些文件可能位于不同的驱动器上。

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

SELECT * FROM sys.database_files

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

非常感谢您的帮助,真不敢相信我错过了这么简单的方法,哈哈。