GetSchema方法可以异步工作吗?

时间:2014-02-11 15:14:25

标签: c# sql sql-server metadata getschema

GetSchema班级的SqlConnection方法如何运作? 它运行查询吗?可以异步调用吗?

3 个答案:

答案 0 :(得分: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/

希望这有帮助!

答案 1 :(得分: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();

我猜这是实际做的是在打开连接时对SQL表或SQL中的information_schema.tables运行查询。 类似的东西:

   SELECT * FROM information_schema.tables 

    SELECT * FROM [database].sys.tables

等效调用类中的其他方法。

对于异步调用,您可以使用

    Asynchronous Processing=True; 
连接字符串中的

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

这回答了你的问题吗?

答案 2 :(得分:0)

我猜它从sys表中获取数据。看http://msdn.microsoft.com/en-us/library/ms188348.aspx

没有GetSchema的异步实现。 如果您需要该方法的具体细节,请尝试使用ILSPY。