我认为最简单的方法是在你的 sql server 实例上运行 sql 脚本,它总是会返回正确的数据和日志文件路径。下面的 sql 可以解决问题
SELECT
db.name AS DBName,
(select mf.Physical_Name FROM sys.master_files mf where mf.type_desc = 'ROWS' and db.database_id = mf.database_id ) as DataFile,
(select mf.Physical_Name FROM sys.master_files mf where mf.type_desc = 'LOG' and db.database_id = mf.database_id ) as LogFile
FROM sys.databases db
order by DBName
如果您愿意,您仍然可以使用 SMO 执行此 sql,这将返回一个数据集,然后您可以提取该信息。
var result = new List();
var server = new Server( serverInstanceName );
var data = server.Databases[ "master" ].ExecuteWithResults(sql);
foreach ( DataRow row in data.Tables[ 0 ].Rows )
result.Add( new DatabaseInfo( row[ "DBName" ].ToString(), row[ "DataFile" ].ToString(), row[ "LogFile" ].ToString() ) );
return result;
如果您将使用此代码段,请确保创建一个 DatabaseInfo 类,该类将存储从 Sql 服务器实例返回的信息。