在ASP.NET中初学使用存储过程(1)

来源:互联网 发布:中国网络日报官方网站 编辑:程序博客网 时间:2024/04/30 21:09
    存储过程在数据库开发中非常有用,而在开发ASP.NET网页时,也经常需要使用到存储过程。今天自己初学使用存储过程,有一点自己的心得。
    设计一个最简单的查询存储过程,设数据库中有表Customer,表中有字段CustomerEmail和CustomerName,输入一个CustomerEmail,查找并打印CustomerEmail和Customer。
    1)查询分析器中建立存储过程  
    create procedure GetProcedure

    (@CustomerEmail varchar(50))

    as

    select * from Customer where CustomerEmail=@CustomerEmail

    2)  private void btnCommit_Click(object sender, System.EventArgs e)
        {
            string CustomerEmail=this.txtCustomerID.Text;
            Customer c=new Customer();
            SqlConnection con=DB.createCon();
            SqlCommand cmd=new SqlCommand();
            SqlParameter para=new SqlParameter("@CustomerEmail",SqlDbType.VarChar,50);
            para.Value=CustomerEmail;
            SqlDataReader sdr;
            cmd.Connection=con;
            cmd.CommandType=CommandType.StoredProcedure;
            cmd.CommandText="GetProcedure";
            cmd.Parameters.Add(para);
            con.Open();
//          sdr=cmd.ExecuteScalar();
            sdr=cmd.ExecuteReader();
            sdr.Read();
            con.Close();
            c.CustomerEmail=sdr.GetString(0);
            c.CustomerName=sdr.GetString(1);
            Response.Write(c.CustomerEmail);
            Response.Write("<br>");
            Response.Write(c.CustomerName);
        }

       注意几点:
1)引入命名空间  using System.Data,否则  SqlDbType.VarChar无用。
2)执行完cmd.ExecuteReader()后还需要执行sdr.Read(),否则会提示在"c.CustomerEmail=sdr.GetString(0);"
部分有错误Invalid attempt to read when no data is present。用Read方法会定位到第一个结果集的第一条记录。
3)不能使用sdr=cmd.ExecuteScalar();ExecuteScalar方法主要返回结果集中的首行首列,由于它只能返回一个值,通常可以利用它来获取聚合值,例如:Int32 rows=(Int32)cmd.ExecuteScalar();