Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用C#将修补程序应用于数据库?_C#_Sql - Fatal编程技术网

如何使用C#将修补程序应用于数据库?

如何使用C#将修补程序应用于数据库?,c#,sql,C#,Sql,我有一个批处理文件,其中包含使用文件夹中的修补程序恢复数据库的命令。我想制作一个GUI应用程序,它可以执行SQL命令,而不是应用文件夹中的所有补丁 我当前在批处理文件中有以下sqlcmd: sqlcmd -E -S(local) -i "c:\temp\MergedPatchFiles.sql" 文件夹中的修补程序已编号-我需要一种方法来查找数据库的当前修补程序编号和文件夹中的修补程序编号,并使用for each循环仅应用所需的修补程序 如何在指定的数据库上使用C#执行“应用修补程序”SQL命

我有一个批处理文件,其中包含使用文件夹中的修补程序恢复数据库的命令。我想制作一个GUI应用程序,它可以执行SQL命令,而不是应用文件夹中的所有补丁

我当前在批处理文件中有以下sqlcmd:

sqlcmd -E -S(local) -i "c:\temp\MergedPatchFiles.sql"
文件夹中的修补程序已编号-我需要一种方法来查找数据库的当前修补程序编号和文件夹中的修补程序编号,并使用for each循环仅应用所需的修补程序


如何在指定的数据库上使用C#执行“应用修补程序”SQL命令?

将SQL文件加载到字符串中,并使用SqlCommand.ExecuteOnQuery方法

将sql文件加载到字符串中,并使用SqlCommand.ExecuteNonQuery方法

您可以通过以下几种方式完成:

  • 用于直接执行
    sqlcmd
    (甚至直接执行批处理文件…)
  • 加载SQL并使用

您可以通过以下几种方式完成:

  • 用于直接执行
    sqlcmd
    (甚至直接执行批处理文件…)
  • 加载SQL并使用

如果文件中有GO语句,您可能会遇到问题,因此您可以使用:


如果文件包含GO语句,则可能会遇到问题,因此可以使用:

我需要一种方法来找到数据库的当前补丁号

首先,您如何在数据库中存储您当前所在的修订数据库?我遇到了3种跟踪修订的不同方案:

  • DDL审计表
  • 包含一行且具有版本号的表
  • “nothing”-您必须根据哪些列、表、视图和存储的进程猜测这是数据库的哪个版本 审计表可以简单到一列表示修补程序编号,一列表示完成时间,或者更复杂

    在我工作的公司里,版本表有时是我能处理的最多的。至少,它只需要2或3列和1行。该表的结构永远不应更改,以便51版应用程序可以打开由2版创建的数据库

    我为之工作过的大多数公司都没有计划跟踪数据库的版本,除了侦探工作之外,通过确定table_Q是在版本17中添加的,而view_p是在版本19中添加的,在版本21中删除的,因此该数据库可能是版本19或20

    我的一个朋友上周跟我谈过,他声称其中有一些补丁方案,可以检测掉到目录中的补丁,确定它们是否已经被应用,并处理那些没有被应用的补丁。我看看能不能从他那里得到更好的细节

    我需要一种方法来找到数据库的当前补丁号

    首先,您如何在数据库中存储您当前所在的修订数据库?我遇到了3种跟踪修订的不同方案:

  • DDL审计表
  • 包含一行且具有版本号的表
  • “nothing”-您必须根据哪些列、表、视图和存储的进程猜测这是数据库的哪个版本 审计表可以简单到一列表示修补程序编号,一列表示完成时间,或者更复杂

    在我工作的公司里,版本表有时是我能处理的最多的。至少,它只需要2或3列和1行。该表的结构永远不应更改,以便51版应用程序可以打开由2版创建的数据库

    我为之工作过的大多数公司都没有计划跟踪数据库的版本,除了侦探工作之外,通过确定table_Q是在版本17中添加的,而view_p是在版本19中添加的,在版本21中删除的,因此该数据库可能是版本19或20

    我的一个朋友上周跟我谈过,他声称其中有一些补丁方案,可以检测掉到目录中的补丁,确定它们是否已经被应用,并处理那些没有被应用的补丁。我看看能不能从他那里得到更好的细节

    string scriptDirectory = "c:\\temp\\sqltest\\";
    string sqlConnectionString = "Integrated Security=SSPI;" + 
                "Persist Security Info=True;Initial Catalog=Northwind;Data Source=(local)";
    DirectoryInfo di = new DirectoryInfo(scriptDirectory);
    FileInfo[] rgFiles = di.GetFiles("*.sql");
    foreach (FileInfo fi in rgFiles)
    {
        FileInfo fileInfo = new FileInfo(fi.FullName);
        string script = fileInfo.OpenText().ReadToEnd();
        SqlConnection connection = new SqlConnection(sqlConnectionString);
        Server server = new Server(new ServerConnection(connection));
        server.ConnectionContext.ExecuteNonQuery(script);
    }