我需要以编程方式附加数据库,但日志文件命名约定似乎不同。
例如:
database1.mdf
has database1.ldf
, database2.mdf
has database2_log.ldf
等等...
所以,我的猜测是有关日志文件的信息将位于 mdf 文件的标头数据中,但我不确定如何读取它。
我用谷歌搜索并得到了这个代码,但它是为了读取版本信息。
using (FileStream fs = File.OpenRead(@"C:\database.mdf"))
{
using (BinaryReader br = new BinaryReader(fs))
{
// Skip pages 0-8 (8 KB each) of the .mdf file,
// plus the 96 byte header of page 9 and the
// first 4 bytes of the body of page 9,
// then read the next 2 bytes
int position = 9 * 8192 + 96 + 4;
br.ReadBytes(position);
byte[] buffer = br.ReadBytes(2);
dbiVersion = buffer[0] + 256 * buffer[1];
}
}
=================================================== ====
问题更新:
- 我的应用程序安装 sql express
- 磁盘上有许多 .mdf 和 .ldf 文件
- app将所有数据库和日志文件复制到sql数据目录
- 应用程序尝试以编程方式附加数据库。
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", @""));
//这是我遇到问题的地方。显然,我不能假设日志文件名与带有 ldf 扩展名的 mdf 文件名相同。那时我就想到有一种方法可以从 mdf 文件中读取头信息,并且会有 ldf 信息。
Server sqlServer = new Server(textServer.Text);
sqlServer.AttachDatabase(databasename, databasefiles);