dynamically fill a dataset with a different stored procedure

Last post 07-05-2009 7:28 AM by markbpriv. 8 replies.

Sort Posts:

  • dynamically fill a dataset with a different stored procedure

    07-02-2009, 9:36 AM
    • Member
      20 point Member
    • markbpriv
    • Member since 08-17-2007, 11:11 AM
    • Posts 120

    Hi,

    I have managed to get paging working on a datalist bound to dataset. The dataset is filled by a MS sql stored procedured.

    What I need to do is dynamically fill the dataset with a different stored procedure when  a users clicks a drop down list or radio button.

    Can anyone help?

    Here's my code behind c# code:


    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Data;
    using System.Data.SqlClient;
    using System.Configuration;


    public partial class index : System.Web.UI.Page
    {

        PagedDataSource pagedData = new PagedDataSource();

        void Page_Load(Object obj, EventArgs e)
        {

            getTheData();
       
        }

        public void getTheData()
        {
            DataSet DS = new DataSet();
            
            SqlConnection objSQLConn = new SqlConnection(ConfigurationManager.ConnectionStrings["MarkConnectionString"].ConnectionString);

            SqlDataAdapter objSQLAdapter = new SqlDataAdapter("sp_customersdefault", objSQLConn);

            objSQLAdapter.SelectCommand.CommandType = CommandType.StoredProcedure;
            objSQLAdapter.Fill(DS, "customers");

            pagedData.DataSource = DS.Tables[0].DefaultView;
            pagedData.AllowPaging = true;
            pagedData.PageSize = 9;

            try
            {
                pagedData.CurrentPageIndex = Int32.Parse(Request["Page"].ToString());
            }
            catch (Exception ex)
            {
                pagedData.CurrentPageIndex = 0;
            }

            btnPrev.Visible = (!pagedData.IsFirstPage);
            btnNext.Visible = (!pagedData.IsLastPage);

            DataList1.DataSource = pagedData;
            DataList1.DataBind();
        }

        public void Prev_Click(Object obj, EventArgs e)
        {
            Response.Redirect(Request.CurrentExecutionFilePath + "?Page=" + (pagedData.CurrentPageIndex - 1));
        }

        public void Next_Click(Object obj, EventArgs e)
        {
            Response.Redirect(Request.CurrentExecutionFilePath + "?Page=" + (pagedData.CurrentPageIndex + 1));
        }

        protected void RadioButtonList1_SelectedIndexChanged(object sender, EventArgs e)
        {


    //I would like to dynamically fill the dataset with a different stored procedure here
          
        }

        protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
        {
            
    //I would like to dynamically fill the dataset with a different stored procedure here
       
        }
        protected void DropDownList2_SelectedIndexChanged(object sender, EventArgs e)
        {


    //I would like to dynamically fill the dataset with a different stored procedure here
        }
    }

    Cheers


    Mark :)

  • Re: dynamically fill a dataset with a different stored procedure

    07-02-2009, 1:23 PM

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Data;
    using System.Data.SqlClient;
    using System.Configuration;
    
    
    public partial class index : System.Web.UI.Page
    {
    
        PagedDataSource pagedData = new PagedDataSource();
    
        void Page_Load(Object obj, EventArgs e)
        {
           
            getTheData("sp_customersdefault");
       
        }
    
        public void getTheData(string procname)
        {
            DataSet DS = new DataSet();
            
            SqlConnection objSQLConn = new SqlConnection(ConfigurationManager.ConnectionStrings["MarkConnectionString"].ConnectionString);
    
            SqlDataAdapter objSQLAdapter = new SqlDataAdapter(procname, objSQLConn);
    
            objSQLAdapter.SelectCommand.CommandType = CommandType.StoredProcedure;
            objSQLAdapter.Fill(DS, "customers");
    
            pagedData.DataSource = DS.Tables[0].DefaultView;
            pagedData.AllowPaging = true;
            pagedData.PageSize = 9;
    
            try
            {
                pagedData.CurrentPageIndex = Int32.Parse(Request["Page"].ToString());
            }
            catch (Exception ex)
            {
                pagedData.CurrentPageIndex = 0;
            }
    
            btnPrev.Visible = (!pagedData.IsFirstPage);
            btnNext.Visible = (!pagedData.IsLastPage);
    
            DataList1.DataSource = pagedData;
            DataList1.DataBind();
        }
    
        public void Prev_Click(Object obj, EventArgs e)
        {
            Response.Redirect(Request.CurrentExecutionFilePath + "?Page=" + (pagedData.CurrentPageIndex - 1));
        }
    
        public void Next_Click(Object obj, EventArgs e)
        {
            Response.Redirect(Request.CurrentExecutionFilePath + "?Page=" + (pagedData.CurrentPageIndex + 1));
        }
    
        protected void RadioButtonList1_SelectedIndexChanged(object sender, EventArgs e)
        {
    
    getTheData(stored proc name here)
    //I would like to dynamically fill the dataset with a different stored procedure here
          
        }
    
        protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
        {
            getTheData(stored proc name here)
    //I would like to dynamically fill the dataset with a different stored procedure here
       
        }
        protected void DropDownList2_SelectedIndexChanged(object sender, EventArgs e)
        {
    
    getTheData("stored proc name here")
    //I would like to dynamically fill the dataset with a different stored procedure here
        }
    }

    You can make the getthedata method takes the parameter of stored proc name and you can pass stored proc name in those events.

    Give a man a fish and you feed him for a day. Teach a man to fish and you feed him forever.
  • Re: dynamically fill a dataset with a different stored procedure

    07-02-2009, 3:37 PM
    • Member
      20 point Member
    • markbpriv
    • Member since 08-17-2007, 11:11 AM
    • Posts 120

    Hi,

    Thanks for this. Its almost working!

    Some of my stored procedures have parmeteres.

    How do I specify them I call getTheData()?

    Cheers


    Mark :)


  • Re: dynamically fill a dataset with a different stored procedure

    07-03-2009, 1:37 AM
    • All-Star
      91,085 point All-Star
    • vinz
    • Member since 10-05-2007, 11:47 AM
    • Cebu, Philippines
    • Posts 13,713
    • TrustedFriends-MVPs

    markbpriv:

    Some of my stored procedures have parmeteres.

    How do I specify them I call getTheData()?

    One way is to create another method with the additional parameters like:

    private void GetTheData(string spName, string param1, string param2)
    {
      // your codes goes here
    }
    
    //then you can call that method with the parameters this way
    
    
    GetTheData("YourSPName","YourParamValue1", "YourParamValue2");

    Or probably create an overload method sothat you can pass optional parameters..

    "Code,Beer and Music ~ my way of being a programmer"

  • Re: dynamically fill a dataset with a different stored procedure

    07-03-2009, 2:01 AM
    • Contributor
      5,176 point Contributor
    • RickNZ
    • Member since 01-01-2009, 3:43 AM
    • Nelson, New Zealand
    • Posts 859

    Why not just pass a flag to the method that calls the SPs?  If the flag is set, configure with one SP and its params.  If it's not set, then use a different SP and its params.  Seems easy, right?


  • Re: dynamically fill a dataset with a different stored procedure

    07-03-2009, 5:52 AM
    define sqlparameter array for those and pass that array to that method, also pass 1 as flag, if the flag is 1, then add those parameters to that command.
    using System;
    using System.Data;
    using System.Configuration;
    using System.Collections;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;
    using System.Data.SqlClient;
    public partial class Default3 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            GridView GridView1 = new GridView();
            foreach (GridViewRow gvRow in GridView1.Rows)
            {
                int ID = Convert.ToInt32(GridView1.DataKeys[gvRow.RowIndex]["ID"]);
                RadioButtonList rbAnswers = (RadioButtonList)gvRow.FindControl("RadioButtonList1");
                using (SqlConnection con = new SqlConnection("your connection string"))
                {
                    SqlCommand cmd = new SqlCommand("insert into answerstablename values (@id,@answerid)", con);
                    cmd.Parameters.AddWithValue("id", ID);
                    cmd.Parameters.AddWithValue("answerid", Convert.ToInt32(rbAnswers.SelectedValue));
                    con.Open();
                    cmd.ExecuteNonQuery();
                    con.Close();
                }
            }  
        }
        protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
        {
              
        }
        protected void GridView1_PreRender(object sender, EventArgs e)
        {
            if (GridView1.EditIndex != -1)
            {
                ((TextBox)GridView1.Rows[GridView1.EditIndex].Cells[1].Controls[0]).Text = "ram";
            }
        }
    }
    using System;   
    using System.Collections.Generic;   
    using System.Linq;   
    using System.Web;   
    using System.Web.UI;   
    using System.Web.UI.WebControls;   
    using System.Data;   
    using System.Data.SqlClient;   
    using System.Configuration;   
      
      
    public partial class index : System.Web.UI.Page   
    {   
      
        PagedDataSource pagedData = new PagedDataSource();   
      
        void Page_Load(Object obj, EventArgs e)   
        {   
              
            getTheData("sp_customersdefault",0,null);   
          
        }   
      
        public void getTheData(string procname,int Flag, SqlParameter[] sqlparams)   
        {   
            DataSet DS = new DataSet();   
               
            SqlConnection objSQLConn = new SqlConnection(ConfigurationManager.ConnectionStrings["MarkConnectionString"].ConnectionString);   
      
            SqlDataAdapter objSQLAdapter = new SqlDataAdapter(procname, objSQLConn);   
      
            objSQLAdapter.SelectCommand.CommandType = CommandType.StoredProcedure;   
            if(Flag == 1)
            {
                objSQLAdapter.SelectCommand.Parameters.AddRange(sqlparams);
            }
            objSQLAdapter.Fill(DS, "customers");   
      
            pagedData.DataSource = DS.Tables[0].DefaultView;   
            pagedData.AllowPaging = true;   
            pagedData.PageSize = 9;   
      
            try  
            {   
                pagedData.CurrentPageIndex = Int32.Parse(Request["Page"].ToString());   
            }   
            catch (Exception ex)   
            {   
                pagedData.CurrentPageIndex = 0;   
            }   
      
            btnPrev.Visible = (!pagedData.IsFirstPage);   
            btnNext.Visible = (!pagedData.IsLastPage);   
      
            DataList1.DataSource = pagedData;   
            DataList1.DataBind();   
        }   
      
        public void Prev_Click(Object obj, EventArgs e)   
        {   
            Response.Redirect(Request.CurrentExecutionFilePath + "?Page=" + (pagedData.CurrentPageIndex - 1));   
        }   
      
        public void Next_Click(Object obj, EventArgs e)   
        {   
            Response.Redirect(Request.CurrentExecutionFilePath + "?Page=" + (pagedData.CurrentPageIndex + 1));   
        }   
      
        protected void RadioButtonList1_SelectedIndexChanged(object sender, EventArgs e)   
        {   
                SqlParameter[] sqlparams = new SqlParameter[1];
                sqlparams[0].ParameterName = "param1";
                sqlparams[0].Value = "value1";
                sqlparams[0].DbType = DbType.String;
                getTheData("stored proc name here",1,sqlparams);   
    //I would like to dynamically fill the dataset with a different stored procedure here   
             
        }   
      
        protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)   
        {   
               SqlParameter[] sqlparams = new SqlParameter[1];
                sqlparams[0].ParameterName = "fsdfs";
                sqlparams[0].Value = "fsdfs";
                sqlparams[0].DbType = DbType.String;
                getTheData("stored proc name here",1,sqlparams);   
    //I would like to dynamically fill the dataset with a different stored procedure here   
          
        }   
        protected void DropDownList2_SelectedIndexChanged(object sender, EventArgs e)   
        {   
      
        SqlParameter[] sqlparams = new SqlParameter[1];
                sqlparams[0].ParameterName = "paramx";
                sqlparams[0].Value = "fsd";
                sqlparams[0].DbType = DbType.String;
                getTheData("stored proc name here",1,sqlparams);    
    //I would like to dynamically fill the dataset with a different stored procedure here   
        }   
    }  
    


     

    Give a man a fish and you feed him for a day. Teach a man to fish and you feed him forever.
  • Re: dynamically fill a dataset with a different stored procedure

    07-03-2009, 3:49 PM
    • Member
      20 point Member
    • markbpriv
    • Member since 08-17-2007, 11:11 AM
    • Posts 120

    Hi,


    Thanks again for your help.

    I get an error 

    Object reference not set to an instance of an object.

    Its on the line where I specify the parameter e.g


    sqlparams[0].ParameterName = "strProductCategory";

    Cheers
    Mark :)

  • Re: dynamically fill a dataset with a different stored procedure

    07-03-2009, 4:24 PM
    Answer

     SqlParameter[] sqlParams = new SqlParameter[] { 
    
         new SqlParameter("@username", "ram") , 
    
         new SqlParameter("@password", "reddy") 
    
      };  

    try like this to create parametr array.

    Give a man a fish and you feed him for a day. Teach a man to fish and you feed him forever.
  • Re: dynamically fill a dataset with a different stored procedure

    07-05-2009, 7:28 AM
    • Member
      20 point Member
    • markbpriv
    • Member since 08-17-2007, 11:11 AM
    • Posts 120

    Thanks so much.

    It worked perfectly.

    Cheers

    Mark :)

Page 1 of 1 (9 items)