簡體   English   中英

當我在SQL查詢中使用go語句時,Oledb Connection出現錯誤

[英]Oledb Connection is getting error when I use go statement in sql query

我們在sql文件中使用大量sql腳本集,並在運行時將該文件加載到C#中的text變量中。 因此,我通過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一起使用,您可以自己拆分批次並單獨運行每個批次

GO不是T-SQL關鍵字,即它不是語言的一部分,它只是某些客戶端(例如Management Studio)用來分隔批次的令牌

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM