在C#中附加SQL Server数据库并自动使用正确的ldf文件

时间:2011-11-18 19:29:19

标签: c# sql-server-2008

  1. 我的应用安装了SQL Server Express
  2. 在磁盘上有许多.mdf和.ldf文件
  3. app将所有数据库和日志文件复制到SQL Server数据目录
  4. app尝试以编程方式附加数据库。
  5. 我的代码是:

    FileInfo mdf = new FileInfo(dbfile);
    
    databasename = mdf.Name.ToLower().Replace(@".mdf", @"");
    StringCollection databasefiles = new StringCollection();
    databasefiles.Add(mdf.FullName);
    databasefiles.Add(mdf.FullName.ToLower().Replace(@".ldf", @"")); 
    //this is where I have issue. Obviously I can't assume that the log file name would be the same as mdf file name with ldf extension. Thats when I thought there would be a way to read the header information from mdf file, and that will have ldf information.
    
    Server sqlServer = new Server(textServer.Text);
    sqlServer.AttachDatabase(databasename, databasefiles);
    

    如何选择正确的.ldf文件。例如,在c:\ temp中,我有db1.mdf,db2.mdf和db1.ldf,db_1.ldf,db1_log.ldf。我怎么知道哪个是db1.mdf的正确.ldf文件

1 个答案:

答案 0 :(得分:1)

不,据我所知,文件本身的MDF和LDF文件之间没有真正的“链接”。 SQL Server中的数据库元数据中有一个链接。

我的方法可能是:

  • 检查mydatabase.ldf是否存在 - >如果是,请使用
  • 检查mydatabase_log.ldf是否存在 - >如果是,请使用
  • 检查mydatabase_1.ldf是否存在 - >如果是,请使用

如果您仍未找到LDF文件,则可以在MDF所在的目录中搜索mydatabase*.ldf。这将在我们的测试服务器上失败 - 我们的系统管理员始终将.MDF/.NDF数据文件安装到SQL2008-DATA,将.LDF日志文件安装到SQL2008-LOG }目录 - 完全分开。

在这种情况下,您需要在例如.MDF -> .LDF中配置映射。配置文件或其他东西,或者只是向用户弹出“查找.LDF文件”对话框....