【问题标题】:C# Get SQL Logs [closed]C# 获取 SQL 日志 [关闭]
【发布时间】:2013-11-29 20:21:53
【问题描述】:

我已经广泛搜索以寻求帮助,但一无所获,我正在尝试将 SQL 日志文件(管理 > SQL Server 日志)备份到 csv 或文本文件。

有没有办法用 C# 做到这一点?

【问题讨论】:

  • 您是否正在编写 SQL(结构化查询语言)并且真的是指 Microsoft SQL Server(实际产品)?如果是:请添加sql-server 标签以明确这一点。如果不是:什么这是用于数据库系统的?

标签: c# sql sql-server logging


【解决方案1】:

来自http://technet.microsoft.com/en-us/library/ms187885(v=sql.105).aspx

使用 SQL Management Studio 或任何其他工具查看 SQL Server 错误日志 文本编辑器。默认情况下,错误日志位于 Program 文件\Microsoft SQL Server\MSSQL.n\MSSQL\LOG\ERRORLOG 和 ERRORLOG.n 文件。

因此您可以使用Directory.EnumerateFiles 类枚举文件并使用File.ReadAllText 从每个文件中读取文本。

【讨论】:

  • 谢谢 Stuart,你知道 SQL 是否有一个保存错误日志位置的注册表项,这是我在查找时遇到的主要问题。谢谢。
  • 我还找到了SELECT SERVERPROPERTY(‘ErrorLogFileName’);
  • 这会很好地解决问题 :) 谢谢。
【解决方案2】:

您应该能够通过 SQL Server SMO 程序集获取错误日志路径:

using System.Data.SqlClient;
using Microsoft.SqlServer.Management.Smo;

namespace SQLLogsToText
{
    internal class Program
    {
        private static void Main(string[] args)
        {
            string errorLogPath = null;

            using (var sqlConnection = new SqlConnection(@"Integrated Security=SSPI; Data Source=(local)\SQLEXPRESS"))
            {
                var serverConnection = new Microsoft.SqlServer.Management.Common.ServerConnection(sqlConnection);
                var server = new Server(serverConnection);
                errorLogPath = server.ErrorLogPath;
            }

            if (errorLogPath != null)
            {
                // Enumerate Files
            }
        }
    }
}

【讨论】:

  • 您应该将 SqlConnections 放在 using 构造中,以确保它们被正确处理..
  • 感谢 Jason,这是一个非常好的解决方案,但根据我目前的计划,我会发现使用 SQL 查询 (SELECT SERVERPROPERTY('ErrorLogFileName')) 查找位置要容易得多,然后我可以复制必要的文件。
  • @Dan Hall - 使用 SERVERPROPERTY 是一个很好的解决方案……这样您就不会对 SMO 程序集有任何依赖。
  • @stuartd - 谢谢。我更新了代码以使用 using 构造。
猜你喜欢
  • 2011-05-17
  • 1970-01-01
  • 1970-01-01
  • 2020-10-13
  • 1970-01-01
  • 2013-12-19
  • 1970-01-01
  • 2010-12-16
  • 2021-12-05
相关资源
最近更新 更多