如何在 C# 中以编程方式读取 sql server mdf header 中的日志文件信息

2023-12-22

我需要以编程方式附加数据库,但日志文件命名约定似乎不同。

例如:
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];
    }
}

=================================================== ====

问题更新:

  1. 我的应用程序安装 sql express
  2. 磁盘上有许多 .mdf 和 .ldf 文件
  3. app将所有数据库和日志文件复制到sql数据目录
  4. 应用程序尝试以编程方式附加数据库。

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);

您不必知道日志文件名即可将数据库和日志文件附加到该数据库。这意味着大量的数据硬编码。使用 SMO 对象:

 Microsoft.SqlServer.Management.Smo.Server server = new ServerConnection("enter server name");
 Microsoft.SqlServer.Management.Smo.Database db = server.Databases("enter db name");
 Console.WriteLine(db.FileGroups[0].Files[0].FileName); 'the mdf file
 Console.WriteLine(db.LogFiles[0].FileName); 'the log file

通过使用 SMO,您不仅可以拥有 sql server 实例的句柄,还可以拥有该实例上的每个数据库。但好处是数据库实例的句柄包含指向 mdf 文件和日志文件的指针。它避免了必须对文件名进行硬编码。

这是关于 SMO 的 MSDN http://msdn.microsoft.com/en-us/library/ms162169.aspx

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 C# 中以编程方式读取 sql server mdf header 中的日志文件信息 的相关文章

  • 如何在 Unity 中从 RenderTexture 访问原始数据

    问题的简短版本 我正在尝试访问 Unity 中 RenderTexture 的内容 我一直在使用 Graphics Blit 使用自己的材质进行绘制 Graphics Blit null renderTexture material 我的材
  • 模板类的不明确多重继承

    我有一个真实的情况 可以总结为以下示例 template lt typename ListenerType gt struct Notifier void add listener ListenerType struct TimeListe
  • SSH 主机密钥指纹与模式 C# WinSCP 不匹配

    我尝试通过 WinSCP 使用 C 连接到 FTPS 服务器 但收到此错误 SSH 主机密钥指纹 与模式不匹配 经过大量研究 我相信这与密钥的长度有关 当使用 服务器和协议信息 下的界面进行连接时 我从 WinSCP 获得的密钥是xx xx
  • 基于范围的 for 循环中的未命名循环变量?

    有没有什么方法可以不在基于范围的 for 循环中 使用 循环变量 同时也避免编译器发出有关未使用它的警告 对于上下文 我正在尝试执行以下操作 我启用了 将警告视为错误 并且我不想进行像通过在某处毫无意义地提及变量来强制 使用 变量这样的黑客
  • 按字典顺序对整数数组进行排序 C++

    我想按字典顺序对一个大整数数组 例如 100 万个元素 进行排序 Example input 100 21 22 99 1 927 sorted 1 100 21 22 927 99 我用最简单的方法做到了 将所有数字转换为字符串 非常昂贵
  • 使用向量的 merge_sort 在少于 9 个输入的情况下效果很好

    不知何故 我使用向量实现了合并排序 问题是 它可以在少于 9 个输入的情况下正常工作 但在有 9 个或更多输入的情况下 它会执行一些我不明白的操作 如下所示 Input 5 4 3 2 1 6 5 4 3 2 1 9 8 7 6 5 4 3
  • 是否有比 lex/flex 更好(更现代)的工具来生成 C++ 分词器?

    我最近将源文件解析添加到现有工具中 该工具从复杂的命令行参数生成输出文件 命令行参数变得如此复杂 以至于我们开始允许它们作为一个文件提供 该文件被解析为一个非常大的命令行 但语法仍然很尴尬 因此我添加了使用更合理的语法解析源文件的功能 我使
  • 初始化变量的不同方式

    在 C 中初始化变量有多种方法 int z 3 与 int 相同z 3 Is int z z 3 same as int z z 3 您可以使用 int z z 3 Or just int z 3 Or int z 3 Or int z i
  • SQL Server 2000 中是否提供公用表表达式 (CTE)

    我最近发现了以下文章 http www tsqltutorials com with common table expressions php http www tsqltutorials com with common table exp
  • 像“1$”这样的位置参数如何与 printf() 一起使用?

    By man I find printf d width num and printf 2 1 d width num 是等价的 但在我看来 第二种风格应该与以下相同 printf d num width 然而通过测试似乎man是对的 为什
  • 用 C 实现 Unix shell:检查文件是否可执行

    我正在努力用 C 语言实现 Unix shell 目前正在处理相对路径的问题 特别是在输入命令时 现在 我每次都必须输入可执行文件的完整路径 而我宁愿简单地输入 ls 或 cat 我已经设法获取 PATH 环境变量 我的想法是在 字符处拆分
  • C 中的位移位

    如果与有符号整数对应的位模式右移 则 1 vacant bit will be filled by the sign bit 2 vacant bit will be filled by 0 3 The outcome is impleme
  • 可空属性与可空局部变量

    我对以下行为感到困惑Nullable types class TestClass public int value 0 TestClass test new TestClass Now Nullable GetUnderlyingType
  • 如何构建印度尼西亚电话号码正则表达式

    这些是一些印度尼西亚的电话号码 08xxxxxxxxx 至少包含 11 个字符长度 08xxxxxxxxxxx 始终以 08 开头 我发现这个很有用 Regex regex new Regex 08 0 9 0 9 0 9 0 9 0 9
  • 在Linux中使用C/C++获取机器序列号和CPU ID

    在Linux系统中如何获取机器序列号和CPU ID 示例代码受到高度赞赏 Here http lxr linux no linux v2 6 39 arch x86 include asm processor h L173Linux 内核似
  • 如何在动态查询中将行值连接到列名

    我正在开发一个允许配置问题和答案的应用程序 目前最多可以有 20 个答案 但也可能更少 我的结构如下 问题 ID FormId QuestionText AnswerField 1 1 Name Answer01 2 1 Address A
  • 窗体最大化时自动缩放子控件

    有没有办法在最大化屏幕或更改分辨率时使 Windows 窗体上的所有内容自动缩放 我发现手动缩放它是正确的 但是当切换分辨率时我每次都必须更改它 this AutoScaleDimensions new System Drawing Siz
  • 如何在 C# 中播放在线资源中的 .mp3 文件?

    我的问题与此非常相似question https stackoverflow com questions 7556672 mp3 play from stream on c sharp 我有音乐网址 网址如http site com aud
  • 如何连接字符串和常量字符?

    我需要将 hello world 放入c中 我怎样才能做到这一点 string a hello const char b world const char C string a hello const char b world a b co
  • 不同类型的指针可以互相分配吗?

    考虑到 T1 p1 T2 p2 我们可以将 p1 分配给 p2 或反之亦然吗 如果是这样 是否可以不使用强制转换来完成 或者我们必须使用强制转换 首先 让我们考虑不进行强制转换的分配 C 2018 6 5 16 1 1 列出了简单赋值的约束

随机推荐

  • 如何获取特定Python模块中的变量列表?

    假设我有以下文件结构 data py foo bar abc def core py import data do something here a print a foo bar abc 我需要获取 data py 文件中定义的所有变量
  • 从实体框架中检索没有 ONE 字段的对象

    我正在使用实体框架来连接数据库 我有一个小问题 我有一张表 其中有一个 varbinary MAX 列 带有文件流 我使用 SQL 请求来管理 数据 部分 但使用 EF 来管理其余部分 文件的元数据 我有一个代码必须获取文件的所有文件 id
  • 如何为任何 Android 设备安装 ADB 驱动程序?

    我是一名安卓开发者 我有一部新的 HTC Inspire 4g 手机 但我不知道如何为其安装 USB 驱动程序 这是我的 android winusb inf 文件 Android WinUsb driver installation Ve
  • Hadoop Pig:传递命令行参数

    有没有办法做到这一点 例如 传递要处理的文件的名称等 这出现在另一个问题 https stackoverflow com questions 3515481 pig latin load multiple files from a date
  • 如何使活动窗口始终位于顶部

    我想创建一个始终位于其他活动顶部的活动 如 Windows 中的模式窗口或任务管理器 我如何在 Android 上执行此操作 谢谢 您可以在 Activity 的重写 onStop 方法中使用以下代码 Override protected
  • 使用代码隐藏从 XAML 访问变量并从 ViewModel 访问对象

    我是 Windows Phone 开发的新手 我想问一下这个场景是否可以实现 我需要使用后面的代码访问 XAML 中的变量 然后将其作为项目添加到视图模型中找到的现有列表中 因此 我需要访问视图模型以获取列表 并访问 XAML 以从资源中获
  • GDAL 未链接

    我正在尝试让我的程序在 Windows 上运行 它依赖于GDAL 一个用于加载GIS数据的库 它在 Linux 和 macOS 上都能很好地编译和链接 我将 CMake 与 MinGW 一起使用 并且遇到了如下链接错误 undefined
  • Objective-C:向类别添加属性

    我已经为 NSDate 构建了一个类别 我想在这个类别中封装一个属性来保存一些数据 但我无法实现添加此属性 只能添加方法 有什么办法可以实现这一点吗 谢谢 这里有一些代码 文件名 NSObject dictionary h import
  • Android ScrollView 滚动条大小

    我正在使用 ScrollView 我想设置 ScrollBar 大小 但我尝试的一切都失败了 我尝试使用属性 android scrollbarSize 样式 主题 但什么也没有 滚动条的大小始终相同 有什么建议么 谢谢 我尝试过这个
  • 使用 Jackson 序列化 java 对象时维护子类型信息,而不使用包装类

    我正在尝试使用 Jackson 在 Java 中的 JSON 文件和具有两个子类的抽象类之间进行转换 理想情况下 我想使用如下 JSON 没有包装器的 Json 文档 type lion name Simba endangered true
  • 如何在实体框架查询中初始化空列表?

    我已将列表字段添加到我的业务模型中 它尚未存储在数据库中 我希望用如下所示的内容临时映射它 return MyContext Foos Select foo gt new Foo Id foo Id Name foo Name Requir
  • 从 PostgreSQL 中的时间戳获取日期

    我有一个 PostgreSQL 时间戳 2009 12 22 11 01 46 我需要将其更改为 2009 12 22 这样我就可以比较日期postgreSQL 我怎样才能实现这个转变 将其投射到date SELECT yourtimest
  • VB.NET 管理对象帮助

    我正在尝试创建一个函数来将映射的驱动器路径转换为 UNC 路径 我做了一些谷歌搜索并发现several http groups google nu group DotNetDevelopment msg 6caffd33ad1eae11 不
  • iis7上的gzip http压缩问题

    我的网络托管提供商正在运行 IIS7 但我在让 gzip 压缩正常工作方面遇到了很多麻烦 主机管理员说已安装压缩 我可以使用一些在线检查服务确认压缩 但不能使用其他服务 PageSpeed Firefox 插件还表示该网站未压缩 我个人坐在
  • 无法分配给函数调用是什么意思(python)[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我最近开始学习Python 我被分配的任务是创建一个在字典中平均成绩的函数 lloyd name Lloyd homework 9
  • 在 argparse 中使用变量 arg 名称

    我有一个上游系统 它使用不同的参数名称调用我的程序 例子 foo xyz1 10 xyz2 25 xyz3 31 我希望 argparsing 的结果为 xyz 10 25 31 我的参数名称有一个共同的前缀 但不幸的是至少必须有不同的数字
  • 使用 JSP 列出服务器目录的内容

    我在服务器上的以下目录中有文件 D tomcat8 webapps schema files 我想列出上面目录中存在的所有文件 我尝试过的 它不起作用 但是 如果我将文件存储在应用程序本身的 WEB INF filefolder 中 则以下
  • 如何在容器上使用本地文件?

    我正在尝试创建一个容器来运行程序 我正在使用预配置映像 现在我需要运行该程序 然而 它是一个机器学习程序 我需要计算机中的数据集才能运行 文件太大 无法复制到容器中 最好是在容器中运行的程序在我的计算机的本地目录中搜索数据集 但我不知道如何
  • 基于字符向量进行子集化时 knit_expand 失败

    我本质上是想修改这个答案 https stackoverflow com a 14368148 2726564以编程方式生成带有变量每个级别的图的块 然而 在我的特定情况下 我传递了一个用于后续子集设置的字符向量 这似乎是代码失败的根源 M
  • 如何在 C# 中以编程方式读取 sql server mdf header 中的日志文件信息

    我需要以编程方式附加数据库 但日志文件命名约定似乎不同 例如 database1 mdf has database1 ldf database2 mdf has database2 log ldf等等 所以 我的猜测是有关日志文件的信息将位