【问题标题】:Dapper - Stored Procedure - Incorrect syntax near 'GO'Dapper - 存储过程 - 'GO' 附近的语法不正确
【发布时间】:2020-08-29 17:07:11
【问题描述】:

我在 myscript.sql 文件中有一个存储过程,如下所示:

CREATE PROCEDURE [dbo].[_GetUserID]
    @EmailAddress NVARCHAR(254)
AS   
    DECLARE @UserID UNIQUEIDENTIFIER;

    SELECT @UserID = [ID] 
    FROM [dbo].[User] 
    WHERE [EmailAddress] = @EmailAddress

    PRINT @UserID    
GO

我有一些依赖 Dapper 来运行此脚本的 C# 代码。当我将它复制并粘贴到 Azure Data Studio 中时,我可以成功运行此脚本。但是,当我尝试从代码运行此脚本时,出现错误:

“GO”附近的语法不正确

我的 C# 代码如下所示:

try
{
     var script = File.ReadAllText("<path to myScript.sql is here>");

     using (var connection = new SqlConnection(dbConnectionString))
     {
         var command = connection.CreateCommand();
         command.CommandText = script;
         command.CommandType = CommandType.Text;

         connection.Open();
         command.ExecuteNonQuery();
     }
                
     Console.WriteLine("Success.");
}
catch (Exception ex)
{
     Console.WriteLine($"Failed. Reason: '{ex.Message}')");
}

我不明白为什么我可以从 Azure Data Studio 运行 myScript.sql,但是,它在我的 C# 代码中不起作用。我也在使用相同的方法创建表,它工作正常。我不确定我错过了什么。

【问题讨论】:

标签: c# sql-server dapper


【解决方案1】:

GO 不是一个有效的 T-SQL 关键字 - 它是一个 分隔符,供 SQL Server Management Studio 使用,显然也用于 Azure Data Studio。

要解决此问题,只需从您的 .sql 脚本文件中删除该 GO 行并在没有此的情况下运行它 - 应该没问题。

另外一点:在您的存储过程中只包含 PRINT 语句没有多大意义 - 您不想实际上 SELECT @UserId 将数据发送回调用者吗?

【讨论】:

  • 感谢您的详细回复。您是正确的,打印语句没有多大意义。我只是试图将问题简化为我可以隔离的问题。无论如何,删除GO 就成功了。非常感谢您的帮助。
猜你喜欢
  • 2020-06-23
  • 2010-09-21
  • 1970-01-01
  • 1970-01-01
  • 2020-07-05
  • 2021-10-25
  • 2014-05-27
  • 1970-01-01
相关资源
最近更新 更多