gpt4 book ai didi

c# - 使用 GO 批处理分隔符执行 SQL 脚本并读取结果

转载 作者:太空宇宙 更新时间:2023-11-03 17:01:00 26 4
gpt4 key购买 nike

我有一个带有 GO 批处理分隔符的 SQL 脚本,我正试图从 C# 代码执行它。当我使用 Microsoft.SqlServer.Management.Common.ServerConnection.ExecuteNonQuery 时,效果很好。不过,它在 Microsoft.SqlServer.Management.Common.ServerConnection.ExecuteReaderMicrosoft.SqlServer.Management.Common.ServerConnection.ExecuteWithResults 上爆炸。

System.AggregateException: One or more errors occurred. --->
Microsoft.SqlServer.Management.Common.ExecutionFailureException: An exception occurred while executing a Transact-SQL statement or batch. --->
System.Data.SqlClient.SqlException: Incorrect syntax near 'GO'.

这是一个非常简单的脚本,如下所示:

SELECT
DB_NAME()
AS
'Database Name';
GO

EXEC [schema].[MyStoredProcedure];
GO

SELECT
[Column]
AS
'Friendly Column Name'
FROM
[schema].[Table];
GO

我已经尝试了 script.Replace("\n", "\r\n") 并且得到了相同的结果。有谁知道如何执行这样的脚本返回结果?

最佳答案

ExecuteReader 和 ExecuteWithResults 无法识别批处理分隔符 GO。最简单的做法就是删除脚本中的 GO 并调用 ExecuteWithResults

脚本

SELECT
DB_NAME()
AS
'Database Name';

EXEC [schema].[MyStoredProcedure];

SELECT
[Column]
AS
'Friendly Column Name'
FROM
[schema].[Table];

代码

DataSet ds = Database.ExecuteWithResults(script);
DataTable dbNameTable = ds.Tables[0]; //Select DB_NAME()
DataTable storedProcedureResults = ds.Tables[1]; //Exec [schema].[MyStoredProcedure]
DataTable queryResults = ds.Tables[2]; //Select [Column] From [Schema].[Table]

关于c# - 使用 GO 批处理分隔符执行 SQL 脚本并读取结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33504096/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com