使用存储过程绑定gridview

时间:2014-08-06 06:24:04

标签: c# asp.net gridview

我有gridview,我在后端使用存储过程。问题是我没有使用任何文本框或仅标签gridview。

当我运行我的代码时,它显示一个编译错误,spproduct1期望参数@id,这是预期不提供的。 你能否修好错误

public partial class WebForm1 : System.Web.UI.Page

{

  string _strsql = string.Empty;

  protected void Page_Load(object sender, EventArgs e)

  {

   string cs = ("Data Source=172.16.6.173;Initial Catalog=servion_hari;User  ID=sa;Password=Servion@123");

   _strsql = "select * from tblproduct where id=@id and Name=@Name and  Description=@Description";

    SqlConnection con = new SqlConnection(cs);

    con.Open();

    SqlDataAdapter da = new SqlDataAdapter("spgetproducts1", con);

    SqlCommand cmd = new SqlCommand();

    SqlParameter id = new SqlParameter("@id", SqlDbType.Int.ToString());

    id.Value = GridView1.ToString();


    da.SelectCommand.CommandType = CommandType.StoredProcedure;


     con.Close();

    DataSet ds = new DataSet();

    da.Fill(ds);

    GridView1.DataSource = ds;

     GridView1.DataBind();


        }
    }
}

5 个答案:

答案 0 :(得分:5)

对于存储过程方式:

        SqlConnection con = new SqlConnection(cs);
        SqlDataAdapter da = new SqlDataAdapter("spgetproducts1", con);
        da.SelectCommand.CommandType = CommandType.StoredProcedure;
        //first paramenter: parameter name, second parameter: parameter value of object type
        //using this way you can add more parameters
        da.SelectCommand.Parameters.AddWithValue("@id", GridView1.ToString());
        DataSet ds = new DataSet();
        da.Fill(ds);
        GridView1.DataSource = ds;
        GridView1.DataBind();

问题;你想用GridView1.ToString()实现什么?

答案 1 :(得分:3)

如果要为查询中定义的参数添加值,可以使用以下命令:

cmd.Parameters.AddWithValue("@id", GridView1.ToString());

更好的实施:

  1. 尝试将所有与数据库相关的函数放在一个单独的文件中,并在表单中调用它们。
  2. 在数据库上定义存储过程并通过C#代码调用它。这种使用存储过程的方式很差
  3. <强>被修改

    步骤1: 在您的数据库上声明您的存储过程,如下所示:

    CREATE PROCEDURE [dbo].[GET_PRODUCTS_SP]
        /*Type of this variables should be their column types*/
        @id int,
        @name varchar(MAX),
        @description varchar(MAX)
    AS
    BEGIN
        SELECT * FROM [dbo].[tblproduct] 
        WHERE id=@id AND 
              Name=@name AND 
              Description=@description
    END
    

    第2步:像这样调用存储过程:

    DataTable dt = new DataTable();
    String conStr = "Data Source=172.16.6.173;Initial Catalog=servion_hari;User  ID=sa;Password=Servion@123";
    SqlConnection con = new SqlConnection(conStr);
    SqlCommand com = new SqlCommand("GET_PRODUCTS_SP", con);
    com.Parameters.AddWithValue("@id", yourIdValue);
    com.Parameters.AddWithValue("@name", yourNameValue);
    com.Parameters.AddWithValue("@description", yourDescriptionValue);
    com.CommandType = CommandType.StoredProcedure;
    SqlDataAdapter da = new SqlDataAdapter(com);
    try
    {
        con.Open();
        da.Fill(dt);
    }
    catch (Exception)
    {
        throw;
    }
    finally
    {
        if (con.State == ConnectionState.Open)
        con.Close();
    }
    GridView1.DataSource = dt;
    GridView1.DataBind();
    

答案 2 :(得分:0)

你错过了

cmd.Parameters.Add(id);

在执行命令之前添加@id参数。

答案 3 :(得分:0)

您得到的错误是因为您只是在不将其分配到SqlCommand的情况下声明SqlParameter。

SqlParameter id = new SqlParameter("@id", SqlDbType.Int.ToString());

id.Value = GridView1.ToString();

更改为

cmd.Parameters.Add(new SqlParameter("@id", GridView1.ToString()));

问题:你的GridView1.ToString()是什么?你想分配给什么?

答案 4 :(得分:-4)

::marker

}