最も簡単な方法は、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;
このスニペットを使用する場合は、Sql サーバー インスタンスから返された情報を格納する DatabaseInfo クラスを必ず作成してください。