GetSchema
课堂方法如何SqlConnection
运作?它运行查询吗?可以异步调用吗?
3 回答
你可以委托调用“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/
希望这可以帮助!
假设您想要 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;";
这是否回答你的问题?
我猜它从 sys 表中获取数据。看看http://msdn.microsoft.com/en-us/library/ms188348.aspx
GetSchema 没有异步实现。如果您需要该方法的具体细节,请尝试使用 ILSPY。