2014-02-11 2 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 

И эквивалентные вызовы для других методов в классе.

Для асинхронных вызовов можно использовать

Asynchronous Processing=True; 

в вашей строке соединения

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

получили ответ на свой вопрос?

+0

означает, что все методы соединения будут выполняться асинхронно? – Yakov

+0

Я не знаю подробностей, но я бы предположил, что да. Вы можете попробовать прочитать http://msdn.microsoft.com/en-us/library/windows/desktop/ms724368(v=vs.85).aspx – JPK

+0

Но это НЕ означает, что ваш код будет генерировать соединения async просто из-за этой настройки это просто означает, что это разрешено. Если он запрещен, он будет либо удерживать соединение до тех пор, пока предыдущий не будет закрыт, либо не вызовет ошибку, если вы попытаетесь вызвать открытое соединение (я не пробовал его, поэтому я не знаю.) Если ваш код начинается и заканчивается по одному то он по-прежнему является линейным процессом, поэтому вы спрашиваете, как установить пул потоков для параллельной обработки? Или просто, если это позволяет асинхронно? – JPK

0

Я предполагаю, что он извлекает данные из таблиц sys. Посмотрите на http://msdn.microsoft.com/en-us/library/ms188348.aspx

Нет реализации async для GetSchema. Если вам нужна конкретная информация о методе, попробуйте использовать ILSPY.

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 для обработки «Asynchronous исполнения», но это очень сложно: http://rusanu.com/2009/08/05/asynchronous-procedure-execution/

Надеется, что это помогает!

Смежные вопросы