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