2

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

4

3 回答 3

4

你可以委托调用“GetSchema”的方法吗?因为 SQL 是事务系统,所以我们在 c# 中处理的并行任务非常不同,甚至可能在 sql 中不存在。这篇文章中排名最高的答案很好地解释了这一点。

SQL Server (TSQL) - 是否可以并行执行语句?

如果您不能异步运行 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/

希望这可以帮助!

于 2014-03-05T16:33:46.167 回答
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 表或 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;";

这是否回答你的问题?

于 2014-03-06T13:47:48.023 回答
0

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

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

于 2014-03-02T20:19:11.297 回答