c# - Create/Alter 过程必须是查询批处理中的第一条语句
问题描述
我正在尝试使用 Visual Studio 中的代码SQL Script
在我的文件夹中执行文件,在此之前它在我使用时工作正常,我最近安装并使用创建了脚本,当应用程序尝试执行脚本时出现错误bin
SQL Server 2012
SQL server 2019
SQL Server 2019
create/alter 过程必须是查询批处理中的第一条语句
我去找了一个朋友,SQL Server 2012
他用他的电脑创建了脚本,它可以工作,但是当我用较新的版本创建它时,我得到了错误,这是我读取脚本文件的代码:
public static string ReadDBFile(string path)
{
string str;
StreamReader reader = new StreamReader(path);
str = reader.ReadToEnd();
str = str.Replace("GO", "");
reader.Close();
return str;
}
这是执行脚本文件的位置:
cmd.CommandText = ReadDBFile(Application.StartupPath + "/scriptfile.sql");
cmd.ExecuteNonQuery();
我确信这与升级有关SQL Server
,关于如何让它工作的任何线索?
解决方案
读取数据库文件,替换\r\n
为\n
,在字符串上拆分*"\nGO\n"
并循环生成的数组,一一执行其中的语句
更像是:
public static string ExecBatchSql(string path)
{
string f = File.ReadAllText(path).Replace("\r\n", "\n");
string fs = f.Split(new[]{"\nGO\n"}, StringSplitOptions.RemoveEmptyEntries);
foreach(string cmd in fs){
SqlCommand c = new SqlCommand(cmd, connStr);
c.ExecuteNonQuery();
}
}
- 注意:检查您的文件以确保 GO 单独出现在一行上,没有前导或尾随空格。如果是这样,请将您的拆分调整为更智能(可能必须使用正则表达式)
推荐阅读
- tensorflow - TensorFlowLite、TendorFlow-TRT 和 TensorRT 之间的主要区别是什么?
- python - AWS Chalice 所需的 AWS IAM 策略
- ios - 在串行队列中同步异步任务
- java - 使用firebase auth,如何在不登录当前活动帐户的情况下创建帐户?
- javascript - 使用 Expresss JS 的错误处理程序中间件时应用程序崩溃
- angular - 使用 *ngFor 迭代时检查值是否存在 - Angular 10
- fluent-bit - 在输出中包含来自文件名(标签)的信息
- javascript - Javascript 总和和总和
- go-gorm - gorm v2:如何处理 v1 中的 gorm.Scope?
- javascript - 如何使用 javascript Map() 函数创建对象