Используйте SqlReader для возврата нескольких таблиц из хранимой процедуры - PullRequest
4 голосов
/ 04 июня 2010

У меня есть определенный пользователем тип, который является датабельным в базе данных SqlServer. Я использую базу данных, DbCommand и т. Д. Для вызова хранимых процедур и получения набора данных. Наборы данных удобны тем, что они могут содержать несколько таблиц.

Теперь я хочу передать Datatable, поэтому я попытался:

string _strComText = "stored_procedure_name_changed_to_protect_the_innocent";
_objCom = _objDB.GetSqlStringCommand(_strComText);
_objDB.AddInParameter(_objCom, "@BASE_ITEMIDS", DbType.Object, dtItemIds);
_objCom.CommandType = CommandType.StoredProcedure;
dataset = _objDB.ExecuteDataSet(_objCom);

Но я получаю исключение, что "@BASE_ITEMIDS" неправильного типа: «Неверный поток протокола удаленного вызова процедур (RPC) входящего потока табличных данных (TDS). Параметр 1 (\" @ BASE_ITEMIDS \ "): тип данных 0x62 (sql_variant) имеет недопустимый тип для метаданных конкретного типа."

Я видел, как это делается с помощью SqlReader, но можно ли использовать sqlReader для возврата нескольких таблиц? Если моя первая таблица пуста, я не вижу строк в SqlReader.

1 Ответ

8 голосов
/ 04 июня 2010

можно ли использовать sqlReader для возврата нескольких таблиц?

Да. Вы должны читать каждую таблицу последовательно и вызывать метод .NextResult() между таблицами.

using (var rdr = MySqlCommand.ExecuteReader())
{
    do 
    {
       while (rdr.Read())
       {
           //do something with each record
       }
    } while(rdr.NextResult());
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...