Как использовать SqlDataReader, если у меня есть больше чем один избранный оператор в хранимой процедуре

В Python (и почти любом другом языке программирования) числа хранятся в виде двоичных чисел. Таким образом, понятие «ведущих нулей» не имеет смысла: для компьютера 123 и 000123 будут храниться точно так же. (И действительно, математик сказал бы, что они представляют одно и то же значение.)

Если вам нужны начальные нули, вы должны сохранить значение в виде строки. Просто удалите вызов int из функции numb.

7
задан Peter Lillevold 1 December 2009 в 08:50
поделиться

2 ответа

Вы используете метод NextResult в устройстве чтения данных для навигации с несколькими результатами из запроса.

Чтобы перебрать все данные, вы должны сделать что-то вроде этого:

var moreResults = true;
while (moreResults)
{
    while (reader.Read())
    {
    ...
    }
    moreResults = reader.NextResult();
}

Таким образом, с этим в качестве фона и предполагая, что главный набор результатов на первом месте, заполнение главных и подробных объектов может быть сделано следующим образом :

Во-первых,создайте словарь основных записей:

var masters = new Dictionary<int, Master>();

var idOrdinal = reader.GetOrdinal("id");
while (reader.Read())
{
    var id = reader.GetInt32(idOrdinal);
    masters.Add(id, new Master{Id=id, ....});
}

Далее перейдите к подробным записям и добавьте их к соответствующему основному устройству:

reader.NextResult();

var masterIdOrdinal = reader.GetOrdinal("masterId");
while (reader.Read())
{
    var masterId = reader.GetInt32(masterIdOrdinal);

    var master = masters[masterId];
    master.Details.Add(new Detail{....});
}

Очевидно, что вы должны заменить имена столбцов тем, что есть в ваших данных, а также обеспечить полную инициализацию объектов Master и Detail. If the detail resultset is sorted on master id, the last loop could be optimized to only lookup each master once from the dictionary. If the resultsets are small though, the gain would not be that huge.

17
ответ дан 6 December 2019 в 10:03
поделиться

... один выбор записей из основной таблицы и прочее из дочерней таблицы .in c # code я хочу получить всю эту запись и поставить all this data in one object...

Peter's solution works to solve the basic problem of retrieving multiple results with a single DataReader. However, If you want to save your data to an object which replicates the relationship between the Master-Details tables, you should be using a DataSet instead.

DataSets can contain multiple DataTables and provide full support for inherent relationships between the tables by allowing creation of DataRelations between the tables. Then you can get related records for each scenario by calling GetChildRows() or GetParentRows() from the Master or Details tables respectively.

There are probably many samples online that illustrate how to do this. Here's one discussion thread from my Group where I have listed the steps and provided some code to demonstrate the procedure.

2
ответ дан 6 December 2019 в 10:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: