C # Как вы возвращаете набор данных из sqldatareader? - PullRequest
21 голосов
/ 04 ноября 2010

У меня есть это в общедоступном классе:

SqlConnection myConnection = new SqlConnection("Data Source=hermes;database=qcvalues; Integrated Security=SSPI;");
myConnection.Open();
SqlDataReader myReader = null;
SqlCommand myCommand = new SqlCommand(InitializeQuery(), myConnection);
myReader = myCommand.ExecuteReader();

Мне нужен источник данных элемента управления для получения набора данных из myReader.

К сожалению, это трудно сделать, потому чтона бланке (отдельный класс).как бы вернуть myReader набор данных в свойство datasource элемента управления в моей форме?

Ответы [ 5 ]

43 голосов
/ 04 ноября 2010

Ты не. Вместо этого используйте DataAdapter:

var ds = new DataSet();

using(var conn = new SqlConnection(connString))
{
    conn.Open();
    var command = new SqlCommand(InitializeQuery(), conn);
    var adapter = new SqlDataAdapter(command);

    adapter.Fill(ds);
}
21 голосов
/ 04 ноября 2010

, если вы можете использовать подкласс DataAdapter или использовать что-то вроде:

DataTable myTable = new DataTable();

myTable.Load(myCommand.ExecuteReader());

и затем возвращает DataTable клиенту.

6 голосов
/ 01 июня 2017
IDataReader reader;
DataSet ds;

while (!reader.IsClosed)
   ds.Tables.Add().Load(reader);
4 голосов
/ 04 ноября 2010

Вместо того, чтобы возвращать SqlDataReader, вы можете изменить свой код так, чтобы он возвращал DataSet .

SqlConnection myConnection = new SqlConnection("Data Source=hermes;database=qcvalues; Integrated Security=SSPI;");
DataSet dst = new DataSet();
SqlDataAdapter dap = new SqlDataAdapter(InitializeQuery(), mConnection);
dap.Fill(dst, "DataSetName");

Одна из замечательных особенностей этого подхода заключается в том, что Fill открывает и закрывает соединение с базой данных для вас.

1 голос
/ 06 ноября 2013

Если ваша SelectCommand является хранимой процедурой, метод Fill адаптера вызовет исключение. В этих случаях вы можете использовать:

                DataTable dt = new DataTable();
                dt = sdr.GetSchemaTable();
                dt.Constraints.Clear();
                dt.BeginLoadData();
                dt.Load(sdr);
                //dt.EndLoadData(); // Enables constraints again
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...