GetSchema
班级的SqlConnection
方法如何运作?
它运行查询吗?可以异步调用吗?
答案 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。