2009-10-21 76 views
2

SQL Server 2008中使用SMO,仍然沒有去... ConnectionContext.ExecuteNonQuery(腳本)無法理解 「GO」

使用後正確引用我敢說:

System.Data.SqlClient; 
Microsoft.SqlServer.Management.Smo; 
Microsoft.SqlServer.Management.Common; 
Microsoft.SqlServer.Management.Sdk.Sfc; 

所有編譯沒有錯誤。

爲了便於調試,我已將代碼剝離到幾乎爲零。

連接到服務器好吧,等等。

Excuting下面的代碼:

SqlConnection connection = new SqlConnection(sqlConnectionString); 
Server server = new Server(new ServerConnection(connection)); 
server.ConnectionContext.ExecuteNonQuery(sqlDBQuery); 

sqlDBQuery是一個字符串:USE [master] GO ALTER DATABASE [Cassiopeia] SET ANSI_NULL_DEFAULT OFF GO ALTER DATABASE [Cassiopeia] SET ANSI_NULLS OFF GO

但它並不重要 「sqlDBQuery」 是的,我總是得到同樣的錯誤,像

GO附近的語法不正確

我是相信如果我刪除GO這是一個去...這麼說,但我真的需要SMO會被說BatchSeparator =「GO」

照顧這,當我看着我的ConnectionContext知道爲什麼我的SMO不起作用。

無處不在我只是說「使用smo就像這樣,你就沒事了」。呃...對我不起作用。

看到這個職位由喬恩·加洛韋以供參考: http://weblogs.asp.net/jgalloway/archive/2006/11/07/Handling-_2200_GO_2200_-Separators-in-SQL-Scripts-2D00-the-easy-way.aspx

問候

回答

6

「GO」是不是SQL語言

它是由客戶端工具,如SSMS使用(一批次分隔不發「GO」到數據庫引擎)

SMO不會像SSMS那樣將腳本解析爲批處理,因此數據庫引擎會拋出錯誤。

評論後:

「GO」必須是一個單獨的行本身

是您的腳本字面上這個(複製/粘貼時,我的「編輯」的問題)

USE [master] GO ALTER DATABASE [Cassiopeia] SET ANSI_NULL_DEFAULT OFF GO ALTER DATABASE [Cassiopeia] SET ANSI_NULLS OFF GO 

或正確格式?

USE [master] 
GO 
ALTER DATABASE [Cassiopeia] SET ANSI_NULL_DEFAULT OFF 
GO 
ALTER DATABASE [Cassiopeia] SET ANSI_NULLS OFF 
GO 
+0

感謝您的回覆,這是非常真實的,「GO」不是SQL,但我試圖使用此解決方案,併購買所有手段,我不明白爲什麼它不適用於我。請參閱Jon Galloways非常讚賞的解決方案:http://weblogs.asp.net/jgalloway/archive/2006/11/07/Handling-_2200_GO_2200_-Separators-in-SQL-Scripts-_2D00_-the-easy-way.aspx – tman 2009-10-21 09:03:46

+0

你在那裏!一小時前發現問題!我重新格式化了以前使用的解決方案的文本(從逃脫標誌剝離文本!)使用StreamReader讀取文件而不是作爲資源(繞過格式化)時發現它。是的,我很愚蠢。感謝您的努力,接近成爲救星! – tman 2009-10-21 10:59:26

0

錯誤的格式化查詢文本導致的錯誤。真的很尷尬。

現在解決了,謝謝!