c#如何从sqldatareader返回数据集?

l--*_*''' 21 .net c# winforms

我在公共课上有这个:

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();
Run Code Online (Sandbox Code Playgroud)

我需要控件的数据源来从myReader获取数据集.

不幸的是,这很难做到,因为控件是在一个表单(一个单独的类)上.如何将myReader数据集返回到datasource表单中控件的属性?

Jus*_*ner 44

你没有.请改用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);
}
Run Code Online (Sandbox Code Playgroud)


pyC*_*der 22

如果您可以使用DataAdapter子类或使用以下内容:

DataTable myTable = new DataTable();

myTable.Load(myCommand.ExecuteReader());
Run Code Online (Sandbox Code Playgroud)

然后将DataTable返回给客户端.

  • 如果一个简单的查询返回一组行:)通常不需要返回所有DataSet :) (3认同)

小智 7

IDataReader reader;
DataSet ds;

while (!reader.IsClosed)
   ds.Tables.Add().Load(reader);
Run Code Online (Sandbox Code Playgroud)

  • 我不明白为什么这个答案被否定了。它确实回答了“从myReader获取数据集”这一问题。就那么简单。 (2认同)

DOK*_*DOK 5

您可以更改代码以使其返回 DataSet ,而不是返回 SqlDataReader 。

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");
Run Code Online (Sandbox Code Playgroud)

这种方法的优点之一是 Fill 会为您打开和关闭数据库连接。