首页 >后端开发 >C++ >如何在C#中使用GO命令高效执行大型SQL脚本?

如何在C#中使用GO命令高效执行大型SQL脚本?

Linda Hamilton
Linda Hamilton原创
2025-01-20 01:42:11519浏览

How Can I Execute Large SQL Scripts with GO Commands in C# Efficiently?

在C#中高效执行包含GO命令的大型SQL脚本

问题:

使用SqlCommand.ExecuteNonQuery()执行包含多个由GO语句分隔的批处理的大型SQL脚本具有挑战性,因为它将GO解释为无效语法。

解决方案1:多个批处理

一种方法是根据GO行将SQL脚本拆分为单个批处理,并分别执行每个批处理。虽然此方法有效,但对于大型脚本而言,它可能很繁琐且容易出错。

解决方案2:SQL Server Management Objects (SMO)

更有效的解决方案是利用SQL Server Management Objects (SMO),它原生支持GO命令分隔符。

示例代码:

<code class="language-csharp">public static void Main()
{
    // SQL连接字符串
    string sqlConnectionString = "Integrated Security=SSPI;" +
                                  "Persist Security Info=True;Initial Catalog=Northwind;Data Source=(local)";

    // 从目录获取SQL脚本
    DirectoryInfo di = new DirectoryInfo("c:\temp\sqltest\");
    FileInfo[] rgFiles = di.GetFiles("*.sql");

    // 使用SMO执行每个脚本
    foreach (FileInfo fi in rgFiles)
    {
        string script = File.ReadAllText(fi.FullName);
        using (SqlConnection connection = new SqlConnection(sqlConnectionString))
        {
            Server server = new Server(new ServerConnection(connection));
            server.ConnectionContext.ExecuteNonQuery(script);
        }
    }
}</code>

附加库:

另一个选择是使用Phil Haack的库,它封装了使用GO分隔符执行SQL脚本的功能:https://www.php.cn/link/3cdad14c5d7c1e1fa307772a876b42d7

以上是如何在C#中使用GO命令高效执行大型SQL脚本?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn