2012-06-19 96 views
0

我有兩個腳本在一個程序中調用,第一個腳本創建一個數據庫,另一個腳本填充數據庫。同步SQL Server和程序

如何知道在啓動第二個腳本之前是否完成了第一個腳本?

如何等待第一個通知過程結束的第二個腳本?服務器如何通知創建數據庫程序並繼續進行下一步工作? 代碼

string createDatabasePath = args [0];

 sqlConnectionStr = Properties.Settings.Default.conString; 
     SqlConnection conn = new SqlConnection(sqlConnectionStr); 
     conn.Open(); 
     SqlCommand comm = new SqlCommand(); 
     comm.Connection = conn; 
     FileInfo file = new FileInfo(createDatabasePath); 
     string script = file.OpenText().ReadToEnd(); 
     script = script.Replace("GO", ""); 
     comm.CommandText = script; 
     comm.ExecuteNonQuery(); 

我的問題是何時執行查詢finishhed?我怎麼知道?

+1

您可以發佈一些代碼,以便我們可以看到您的腳本如何被調用? –

+0

向數據庫發送兩個請求。首先是'DDL',然後是'Console.Writeline(「First Process Over」);'現在發送第二個'DML'請求。 – Pankaj

回答

2

我們需要知道「在一個程序中」的含義 - 是一組T-SQL命令還是一個C#應用程序等?然而,以確保一個最簡單的方法完成之前對方只是將它們組合成一個單一的過程,或有第一次調用第二個:

...Do the stuff in Process1; 
EXEC Process2; 

一個更復雜的方法是改變第二檢查新數據庫是否存在,並等待一段時間直到完成:

DECLARE @I INT 
SET @I = 0 

WHILE @I = 0 
BEGIN 
    IF OBJECT_ID('NewDB..tblFinalTableCreated') IS NOT NULL 
     SET @I = 1 
    ELSE 
     WAITFOR DELAY '00:05:00' --Wait 5 minutes 
END 

StartProcess2; 
+0

thx但我更喜歡C#代碼? –

+0

Gotcha - 我看到您只是使用存儲在文件中的T-SQL腳本,但上面的流程#2仍然可以正常工作,而只需使用C#。檢查[this](http://www.dotnetspider.com/resources/29696-Find-if-database-table-or-stored-procedure.aspx)以瞭解如何檢查數據庫或表是否存在,然後將其放入一個和上面相同的基本循環:do {檢查表是否存在,如果是,則將@i設置爲1}(@i <> 1)。 –

+0

謝謝好答案:D:D –

相關問題