【发布时间】:2021-12-06 05:36:23
【问题描述】:
我有一些 SQL 请求:
go
Update dbo.Parameter set ValueAsStr = '{
"CreateDepoUrl": "https://sandbox.sg...../",
"CheckDepoStatusUrl": "https://sandbox.sg..../",
"CreatePayoutUrl": "https://sandbox.sg....../",
"CheckPayoutStatusUrl": "https://sandbox.sg..../",
"PayoutTerminalIds": {
....
go
如果我在 SSMS 中发送此请求,一切正常
我从 C# 代码发送 SQL 请求的方法:
public static void SendToMainSqlRequest(MainDbContext mainDbContext, string queryString)
{
using (var conn = mainDbContext.Database.GetDbConnection())
{
conn.Open();
var command = mainDbContext.Database.GetDbConnection().CreateCommand();
command.CommandText = queryString;
command.CommandType = CommandType.Text;
int number = command.ExecuteNonQuery();
Console.WriteLine("count of updates: {0}", number);
conn.Close();
}
}
当我在 C# 代码中发送请求时出现异常:
'.' 附近的语法不正确
如果我删除“dbo”。在 SQL 请求中我得到一个异常:
'=' 附近的语法不正确
表名和字段名正确。没有错别字。
我该如何解决这个问题?
谢谢!
【问题讨论】:
-
"GO" 不是 SQL 命令,它是一个只有 SSMS 知道的分隔符。所以你需要过滤掉它
-
GO不是 T-SQL 运算符;用 C# 编写 SQL 时,它们不应该出现在您的 SQL 中。GO是批量分离,被 IDE 识别,如 SSMS、SQLCMD、ADS、DBeaver 等。 -
逐行阅读脚本。如果读取了“GO”,则执行您收集到的语句,然后通过相同的逻辑继续读取直到结束。这就是 SSMS 的作用。
-
简单地过滤掉“GO”不会在任何地方都有好处。有些语句应该是批处理中的第一个语句,因此在“GO”之后没关系,但如果“GO”被过滤掉并且语句成为批处理中的中间语句,它将无法工作。
标签: c# sql-server entity-framework