Publish date: 2006-05-25

Stored procedure. Obtaining of row set (C#, FW 2.0)

 /// <summary>
/// Stardard way for Stored procedures execution
/// </summary>
/// <param name="connection_str"></param>
public void Run(string connection_str)
{
    /* test */
    OleDbConnection con = new OleDbConnection(connection_str);  //create connection
    con.Open();
    OleDbTransaction trans = con.BeginTransaction();            //begin transaction

    //select stored procedure in params
    OleDbCommand cmd_in_params = new OleDbCommand("select cust_no from CUSTOMER",con,trans);

    //select mail label through the stored procedure
    OleDbCommand cmd_stored_proc = new OleDbCommand("select * from mail_label(:cust_no)", con, trans);
    //add one IN parameter
    cmd_stored_proc.Parameters.Add("cust_no", OleDbType.Integer);

    //execure reader
    OleDbDataReader rdr = cmd_in_params.ExecuteReader();

    //for each customer No
    while (rdr.Read())
    {
        //retrive stored proc data
        cmd_stored_proc.Parameters["cust_no"].Value = rdr["cust_no"];
        OleDbDataReader rdr_out = cmd_stored_proc.ExecuteReader();

        Console.WriteLine("Customer #" + rdr["cust_no"]);

        //print out parameter values
        while (rdr_out.Read())
            for (int i = 0; i < rdr_out.FieldCount; i++)
                Console.WriteLine(rdr_out.GetName(i) + "=" + rdr_out[i]);

        rdr_out.Close();  //must be closed before using again
        Console.WriteLine();
    }
    rdr.Close();

    trans.Commit();
    con.Close();
}