Подтвердить что ты не робот

С# как вы возвращаете набор данных из sqldatareader?

У меня это в открытом классе:

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 элемента управления в моей форме?

4b9b3361

Ответ 1

Нет. Вместо этого используйте 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);
}

Ответ 2

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

DataTable myTable = new DataTable();

myTable.Load(myCommand.ExecuteReader());

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

Ответ 3

Вместо возврата 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 открывает и закрывает соединение с базой данных для вас.

Ответ 4

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

                DataTable dt = new DataTable();
                dt = sdr.GetSchemaTable();
                dt.Constraints.Clear();
                dt.BeginLoadData();
                dt.Load(sdr);
                //dt.EndLoadData(); // Enables constraints again

Ответ 5

IDataReader reader;
DataSet ds;

while (!reader.IsClosed)
   ds.Tables.Add().Load(reader);