如何使用 C# 中的“Go”语句运行 sql 脚本

Posted

技术标签:

【中文标题】如何使用 C# 中的“Go”语句运行 sql 脚本【英文标题】:How to run sql script with 'Go' statements from C# 【发布时间】:2019-12-30 07:21:08 【问题描述】:

我正在尝试运行包含“GO”语句作为批处理分隔符的 SQL 脚本。 我遇到了 Jon Galloway 使用 SMO(nuget 包 Microsoft.SQlServer.SQLManagementObjects)处理这种类型情况的方法。

con = new SqlConnection(connectionString);//1
var serverConnection = new ServerConnection(con);//2
var server = new Server(serverConnection);//3
StreamReader streamReader = new StreamReader(@"D:\Scripts\Install-Northwind-Script.sql");//4
string script = streamReader.ReadToEnd();//5
server.ConnectionContext.ExecuteNonQuery(script);//6

以上代码在第 6 行抛出异常。

System.IO.FileNotFoundException: '无法加载文件或程序集 'Microsoft.SqlServer.BatchParser,版本=15.100.0.0,文化=中性, PublicKeyToken=89845dcd8080cc91' 或其依赖项之一。这 系统找不到指定的文件。'

它给出了 FileNotFound 异常,但它在第 5 行成功读取了文件的所有内容。 我尝试添加 Microsoft.SqlServer.BatchParser 引用,但找不到。

谁能帮我知道我在这里做错了什么?

【问题讨论】:

【参考方案1】:

此错误不会出现在您的查询中,而是缺少 Sql Server BatchParser 的程序集这一事实。要解决这个问题,您必须安装

x64\SharedManagementObjects.msix64\SQLSysClrTypes.msi

安装 smo 程序集后,您应该可以开始使用了。 更好的选择是使用这个 Nuget 包。它包含 smo 对象版本 15 所需的一切。 安装命令(只需在 nuget 包管理器控制台中输入)

Install-Package Microsoft.SqlServer.SqlManagementObjects -Version 150.18208.0

【讨论】:

感谢@Siavash 的建议,我确实从 nuget 安装了 Microsoft.SqlServer.SqlManagementObjects 并使用了命名空间 Microsoft.SqlServer.Management.Smo; Microsoft.SqlServer.Management.Common;仍然得到缺少的程序集异常 @Aditya 不客气。如果它解决了您的问题,您也可以将答案标记为最佳答案,因此它对 SO 的未来仍然有用。

以上是关于如何使用 C# 中的“Go”语句运行 sql 脚本的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 C# 执行 .SQL 脚本文件

如何在 Delphi 中执行包含许多 GO 语句的大型 SQL 脚本? [关闭]

Azure DB 上 C# 中的 SQL 插入语句 - 运行速度非常慢

如何从 C# 动态运行 SQL Server CE [Windows mobile] 中的 SQL 脚本文件?

SQL脚本中的go是啥意思

sqlgo是啥意思,如何使用?