c# how do you return dataset from sqldatareader?

前端 未结 6 1232
[愿得一人]
[愿得一人] 2020-12-29 05:13

I have this in a public class:

SqlConnection myConnection = new SqlConnection(\"Data Source=hermes;database=qcvalues; Integrated Security=SSPI;\");
myConnect         


        
相关标签:
6条回答
  • 2020-12-29 05:38

    You don't. Use a DataAdapter instead:

    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);
    }
    
    0 讨论(0)
  • 2020-12-29 05:39

    Instead of returning a SqlDataReader, you can change your code so that it returns a 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");
    

    One of the neat things about this approach is that Fill opens and closes the database connection for you.

    0 讨论(0)
  • 2020-12-29 05:40

    the below snippet works fine for me on 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;
    }
    

    the DbDataAdapter instance can be retrieved from DbProviderFactories class.

    DbDataAdapter adapter = DbProviderFactories.GetFactory(Database.GetDbConnection()).CreateDataAdapter();
    
    0 讨论(0)
  • 2020-12-29 05:50

    if you can use DataAdapter subclass or use something as:

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

    and then return DataTable to client.

    0 讨论(0)
  • 2020-12-29 05:50

    If your SelectCommand is stored procedure, the Fill method of the adapter will rise exception.

    In these cases you can use:

    DataTable dt = new DataTable();
    dt = sdr.GetSchemaTable();
    dt.Constraints.Clear();
    dt.BeginLoadData();
    dt.Load(sdr);
    //dt.EndLoadData(); // Enables constraints again
    
    0 讨论(0)
  • 2020-12-29 05:56
    IDataReader reader;
    DataSet ds;
    
    while (!reader.IsClosed)
       ds.Tables.Add().Load(reader);
    
    0 讨论(0)
提交回复
热议问题