捕获SQL InfoMessage时输出文件错误

时间:2019-03-17 11:05:05

标签: c# sql-server streamwriter textwriter

我的代码有点问题。

当我在SQL Server数据库中运行更新时,我尝试捕获所有信息消息。问题是我的文件输出错误。

我正在使用resources.resx,该脚本具有所有脚本,并根据具有客户端的版本运行它们。

我的代码:

try
{
    string sqlConnectionString = Parameters.Config.ConnectionString;

    for (int i = DbVersion + 1; i <= FileDbVersion; i++)
    {
        string updateScripts = "script_" + i.ToString("D5");

        ResourceManager sqLUpdateScripts = new ResourceManager(typeof(SQLUpdateScripts));
        string myString = sqLUpdateScripts.GetString(updateScripts);

        //string resVal = SQLUpdateScripts.ResourceManager.GetString(updateScripts, Thread.CurrentThread.CurrentCulture);

        var sqlqueries = myString.Split(new[] { "\nGO", "\ngo" }, StringSplitOptions.RemoveEmptyEntries);
        Console.WriteLine(updateScripts);

        SqlConnection conn = new SqlConnection(sqlConnectionString);
        SqlCommand cmd = new SqlCommand("query", conn);

        Server server = new Server(new ServerConnection(conn));

        conn.Open();

        var progressBar = 10;
        var line = 0;

        foreach (var query in sqlqueries)
        {
            progressBar += 10;
            line +=1;

            Console.WriteLine(query);

            cmd.CommandText = query;
            cmd.ExecuteNonQuery();

            conn.InfoMessage += delegate (object sender, SqlInfoMessageEventArgs e)
                    {
                        FileStream ostrm;
                        StreamWriter writer;
                        TextWriter oldout = Console.Out;
                        string _dbUpdateLogPath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + @"\DBUpdate" + DateTime.Now.ToString("ddMMyy") + ".txt";

                        try
                        {
                            if (!File.Exists(_dbUpdateLogPath))
                            {
                                ostrm = new FileStream(_dbUpdateLogPath, FileMode.OpenOrCreate, FileAccess.Write);
                                writer = new StreamWriter(ostrm);
                                Console.SetOut(writer);
                                Console.WriteLine(DateTime.Now + " - "+line+" - " + e.Message);
                                Console.SetOut(oldout);
                                writer.Close();
                                ostrm.Close();
                            }
                            else if (File.Exists(_dbUpdateLogPath))
                            {
                                ostrm = new FileStream(_dbUpdateLogPath, FileMode.Append, FileAccess.Write);
                                writer = new StreamWriter(ostrm);
                                Console.SetOut(writer);
                                Console.WriteLine(DateTime.Now + " - " + line + " - " + e.Message);
                                Console.SetOut(oldout);
                                writer.Close();
                                ostrm.Close();
                            }
                        }
                        catch (Exception ex)
                        {
                            NLogger.NLogger.LibraryLogClass.Error(ex.ToString());
                            return;
                        }

                    };
        }

        //server.ConnectionContext.ExecuteNonQuery(script);
        conn.Close();
    }
}
catch (Exception ex)
{
    NLogger.NLogger.LibraryLogClass.Error(ex.ToString());
    return;
}

我期望的输出是

17/3/2019 12:42:07 μμ - 6 - Dropping foreign keys from [dbo].[NomismataUpdate]
17/3/2019 12:42:08 μμ - 9 - Dropping constraints from [dbo].[NomismataUpdate]
17/3/2019 12:42:10 μμ - 12 - Altering [dbo].[Diasafisi]
17/3/2019 12:42:12 μμ - 16 - Altering [dbo].[DeltioApostolis]
.
.
.
17/3/2019 12:42:31 μμ - 81 - The database update succeeded

但是在我的文件中却有

    17/3/2019 12:42:07 μμ - 6 - Dropping foreign keys from [dbo].[NomismataUpdate]
17/3/2019 12:42:07 μμ - 6 - Dropping foreign keys from [dbo].[NomismataUpdate]
17/3/2019 12:42:07 μμ - 6 - Dropping foreign keys from [dbo].[NomismataUpdate]
17/3/2019 12:42:07 μμ - 6 - Dropping foreign keys from [dbo].[NomismataUpdate]
17/3/2019 12:42:07 μμ - 6 - Dropping foreign keys from [dbo].[NomismataUpdate]
17/3/2019 12:42:07 μμ - 6 - Dropping foreign keys from [dbo].[NomismataUpdate]
17/3/2019 12:42:08 μμ - 9 - Dropping constraints from [dbo].[NomismataUpdate]
17/3/2019 12:42:08 μμ - 9 - Dropping constraints from [dbo].[NomismataUpdate]
17/3/2019 12:42:08 μμ - 9 - Dropping constraints from [dbo].[NomismataUpdate]
17/3/2019 12:42:08 μμ - 9 - Dropping constraints from [dbo].[NomismataUpdate]
17/3/2019 12:42:08 μμ - 9 - Dropping constraints from [dbo].[NomismataUpdate]
17/3/2019 12:42:08 μμ - 9 - Dropping constraints from [dbo].[NomismataUpdate]
17/3/2019 12:42:08 μμ - 9 - Dropping constraints from [dbo].[NomismataUpdate]
17/3/2019 12:42:08 μμ - 9 - Dropping constraints from [dbo].[NomismataUpdate]
17/3/2019 12:42:08 μμ - 9 - Dropping constraints from [dbo].[NomismataUpdate]

等等。

似乎它进入了文件内部并打印出与“ foreach(sqlqueries中的var查询)”相同的行数

0 个答案:

没有答案