2014-02-11 128 views

回答

3

假設你想要的C#的答案,因爲它是你的標籤看到: Use SqlConnection.GetSchema to get Tables Only (No Views)

using System.Data.SqlClient; 

SqlConnection.GetSchema("Tables"); 

SQLCon.Open(); 
    DataTable tables = SQLCon.GetSchema("Tables"); 
    SQLCon.Close(); 

我猜這實際上是什麼正在對sys表或信息運行查詢_schema.tables在SQL中打開連接時。 類似:

SELECT * FROM information_schema.tables 

SELECT * FROM [database].sys.tables 

以及類中的其他方法的等效調用。

對於異步調用,您可以在連接字符串

string connectionString = "Data Source=yourDataSource;Initial Catalog=yourCat;Integrated Security=true;Asynchronous Processing=True;"; 

這個回答你的問題在使用

Asynchronous Processing=True; 

+0

是否意味着所有的連接方法將被異步執行? – Yakov

+0

我不知道細節,但我會承認是的。 您可以嘗試閱讀http://msdn.microsoft.com/en-us/library/windows/desktop/ms724368(v=vs.85).aspx – JPK

+0

但它並不意味着您的代碼將生成連接異步只是因爲這個設置,它只是意味着它被允許。如果不允許,那麼它會保持連接,直到前一個關閉,或者如果您嘗試打開一個打開的連接時發生錯誤(我沒有嘗試過,所以我不知道)。 如果您的代碼一次開始和結束一個那麼它仍然是一個線性過程,所以你在問如何爲並行處理建立一個線程池?或者只是它允許異步? – JPK

4

你可以委託調用「GetSchema」的方法嗎?因爲SQL是事務性系統,我們在c#中使用的並行任務非常不同,甚至可能在sql中不存在。這篇文章中排名最高的答案在解釋這個方面做得很好。

SQL Server (TSQL) - Is it possible to EXEC statements in parallel?

如果您不能運行的getSchema方法異步,因爲該方法只返回一個數據表,你可以針對交替返回同樣的事情數據庫執行查詢。

這個帖子顯示的getSchema返回一個數據表:http://msdn.microsoft.com/en-us/library/ms136365(v=vs.110).aspx

閱讀這個帖子上的言論:http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.getschema(v=vs.110).aspx

如果調用的getSchema不止一次,最後一次通話可能覆蓋的第一反應。

如果你能,你可能會在SQL創建一個服務隊列處理「異步執行」,但它是非常複雜的:http://rusanu.com/2009/08/05/asynchronous-procedure-execution/

希望這有助於!