我正在尝试运行包含'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引用,但找不到一个。
有人可以帮我知道我在这里做错什么吗?
此错误不在您的查询中,但缺少Sql Server BatchParser的程序集的事实。要修复您必须安装
x64\SharedManagementObjects.msi
和x64\SQLSysClrTypes.msi
安装了smo组件后,您应该就可以开始了。更好的选择是使用此Nuget软件包。它包含了smo对象版本15所需的全部。命令isntall(只需在nuget软件包管理器控制台中输入此命令)
Install-Package Microsoft.SqlServer.SqlManagementObjects -Version 150.18208.0