c#如何从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属性?

你没有。 改为使用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); } 

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

 DataTable myTable = new DataTable(); myTable.Load(myCommand.ExecuteReader()); 

然后将DataTable返回给客户端。

您可以更改代码以使其返回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"); 

这种方法的一个巧妙之处是Fill为您打开和关闭数据库连接。

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

如果您的SelectCommand是存储过程,则适配器的Fill方法将引发exception。 在这些情况下,您可以使用:

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