2010-10-20 82 views
2

對於我的應用程序的特定安裝,我需要從安裝程序本身在SQL服務器上創建數據庫和模式。我有一個自定義安裝程序,通過它我可以檢測並安裝前提條件和軟件。系統會提示用戶提供數據庫服務器的IP以及用戶名和密碼。在幕後,我創建了一個連接和一個命令對象。我將查詢保存在不同的文件中。我使用讀取器並讀取文件的內容,並將文件的內容設置爲命令對象的CommandText。該文件的典型內容如下:ADO:使用連接和命令對象執行多個TSQL

create database mydatabase 
Go 

Use mydatabase 
Go 

EXEC sp_MSforeachtable @command1 = "DROP TABLE ?" 

現在的問題是第一個語句得到執行,但它之後給出了錯誤。顯示的錯誤是:「syntax error near 'GO'」。我嘗試刪除GO語句,並嘗試用分號結束sql語句。在這種情況下的錯誤是「Database 'mydatabase'does not exist. Make sure that the name is entered correctly.」。

但是,如果我在文件中保留單個語句,它可以正常工作。

有人可以幫我嗎?

回答

4

正如你可以在http://technet.microsoft.com/en-us/library/aa258908%28SQL.80%29.aspx

備註

看到

GO不是Transact-SQL語句;它 是由osql 和isql實用程序和SQL查詢 分析器識別的命令。

所以這是您使用.NET中的SqlCommand運行時出現問題的原因。 在我看來,你有兩個選擇:

1)逐一執行指令。也許在文件中使用分隔符,然後拆分SQL語句並使用for/foreach按順序執行它們。

2)使用SQL Server管理對象(SMO)中的Server類,它應該允許您執行包含「Go」語句的腳本。

+0

非常感謝。我已經採取了暫時的第一種選擇,並尋找其他可行的選擇。 – Kangkan 2010-10-20 08:44:07

1

您可以通過簡單地添加一個「;」來執行多個sql命令語句,在每個命令的結尾,而不是「GO」語句。

例子:

cmd.CommandText = @" Update TableA Set ColumnA = 'Test' Where ID = 1; 
       Update TableB Set ColumnA = 'Second line' Where ID = 2; 
      "; 
+0

我試過了。但它不起作用。如果仔細觀察我的帖子的結尾,我會收到錯誤「Database'mydatabase'不存在,請確保名稱輸入正確。」在這種情況下。 – Kangkan 2010-10-22 03:57:21