我在公共课上有这个:
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
属性中?
答案 0 :(得分:42)
你没有。改为使用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);
}
答案 1 :(得分:21)
如果您可以使用DataAdapter子类或使用以下内容:
DataTable myTable = new DataTable();
myTable.Load(myCommand.ExecuteReader());
然后将DataTable返回给客户端。
答案 2 :(得分:4)
您可以更改代码,使其返回数据集,而不是返回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会为您打开和关闭数据库连接。
答案 3 :(得分:4)
IDataReader reader;
DataSet ds;
while (!reader.IsClosed)
ds.Tables.Add().Load(reader);
答案 4 :(得分:1)
如果您的SelectCommand是存储过程,则适配器的Fill方法将引发异常。 在这些情况下,您可以使用:
DataTable dt = new DataTable();
dt = sdr.GetSchemaTable();
dt.Constraints.Clear();
dt.BeginLoadData();
dt.Load(sdr);
//dt.EndLoadData(); // Enables constraints again
答案 5 :(得分:0)
以下代码段在SqlServer
上对我来说效果很好:
public DataSet executeProcedure(String procudureName, params SqlParameter[] sqlParameters)
{
return executeSqlCommand(procudureName, CommandType.StoredProcedure, sqlParameters);
}
public DataSet executeSql(String commandText, params SqlParameter[] sqlParameters)
{
return executeSqlCommand(commandText, CommandType.Text, sqlParameters);
}
public DataSet executeSqlCommand(String commandText, CommandType Commandtype, params SqlParameter[] sqlParameters)
{
DataSet myset = new DataSet();
using (var command = Database.GetDbConnection().CreateCommand())
{
command.CommandText = commandText;
command.CommandType = Commandtype;
foreach (var _kv in sqlParameters)
{
DbParameter _dbpara = command.CreateParameter();
_dbpara.ParameterName = _kv.ParameterName;
_dbpara.Value = _kv.Value;
command.Parameters.Add(_dbpara);
}
Database.OpenConnection();
DbDataAdapter adapter = DbProviderFactories.GetFactory(Database.GetDbConnection()).CreateDataAdapter();
adapter.SelectCommand = command;
adapter.Fill(myset);
}
return myset;
}
可以从DbDataAdapter
类中检索DbProviderFactories
实例。
DbDataAdapter adapter = DbProviderFactories.GetFactory(Database.GetDbConnection()).CreateDataAdapter();