c# - 当我在 sql 查询中使用 go 语句时,Oledb 连接出现错误

标签 c# sql sql-server sql-server-2008

我们在 sql 文件中使用批量的 sql 脚本集,并在运行时将该文件加载到 C# 中的文本变量。因此我通过 Oledb Connection 和 Command 类型执行以下查询 作为“文本”。不幸的是,出现了以下错误。

Incorrect syntax near 'GO'.
Incorrect syntax near 'GO'.
Incorrect syntax near the keyword 'with'. If this statement is a common table expression, an xmlnamespaces clause or a change tracking context clause, the previous statement must be terminated with a semicolon.
Incorrect syntax near 'GO'.

SQL 查询语法

  IF exists  (
                SELECT  '1' 
                FROM    sysobjects 
                WHERE   id = object_id(N'SP_Name')  
                and     objectproperty(id, N'isprocedure') = 1
               )
    BEGIN
        DROP PROC SP_Name 
    END
    GO
    Create PROCEDURE SP_Name 
     (  
       @var_id NUMERIC(10),
       @var_id1 NVARCHAR(100),
       @var_id_Out1     numeric(10)     output,
       @var_id_Out2     integer         output,
       @var_id_Out3     nvarchar(2000)  output
    )  
    WITH ENCRYPTION  
    AS  
    BEGIN  
    SET NOCOUNT ON  
        select * from demotable
    SET NOCOUNT OFF  
    END 
    GO

GRANT   EXEC ON SP_Name TO PUBLIC
GO

C# 代码片段

OleDbCommand cmd;
OleDbConnection co = new OleDbConnection("Provider=SQLOLEDB;Data Source=servername;Database=DB_Name;User Id=sa;Password=mypass;");
co.Open();
String[] strFileList = Directory.GetFiles(@"D:\Procedure");
String conntent = null;
foreach (string commandSP in strFileList)
{
       conntent = File.ReadAllText(commandSP);
       cmd = co.CreateCommand();
       cmd.CommandText = conntent;     
       cmd.ExecuteNonQuery();
}
co.Close();

最佳答案

GO 命令是 T-SQL 语法...由前端解释以分隔批处理...OLEDB 和服务器都不会理解该语句...

要使其与 OLEDB 配合使用,您可以自己拆分批处理并单独运行每个批处理

关于c# - 当我在 sql 查询中使用 go 语句时,Oledb 连接出现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15941747/

相关文章:

c# - 具有 Asp.Net Core ViewComponents 的多个 Knockout View 模型

C#泛型无效的原因

c# - 蜂拥而至包围而不是远离?

mysql - 获取最新的行并将其与另一个表链接?

sql - postgresql如何使用greatest function获取最大值的列名?

mysql - SQL Join 查询左表中不匹配的行

c# - 在 JavaScript 中将 C# .NET DateTime.ticks 转换为天/小时/分钟

sql - 在 Knex 迁移中创建数据库

sql-server - 如果相同的 id 重复,则限制行数

sql - 如何将 base-2 字符串(例如 '001011' )转换为二进制数据类型?