在ASP.NET中使用存储过程(转录)

1、首先要查看一下页面中是否引用了 System.Data.Sqlclient;当然数据库连接是必不可少的 

2、Asp.Net中调用数据的步骤:
    (1)、 新建一个数据库连接对象(一般用SqlConnection)
    (2)、用Open()方法打开我们要操作的数据库
    (3)、创建一个SqlCommand或SqlDataAdapter对象
    (4)、对SQL命令或存储过程用ExecuteNonQuery()方法或ExecuteReader()方法进行执行数据操作
    (5)、读取或输入数据至数据库
    (6)、用Close()方法关闭连接.

3、SqlCommand对象或SqlDataAdapter对象使填充DataSet或共它在运用存储过程中有很大的作用.但其运用的方法是跟在Net中直接执行Sql语句区别并不是很大!

4、  (1)、采用SqlCommand对象  (过程非常重要)
       string spid=Request.QueryString["supplyid"].Trim();
SqlConnection conndb=new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["conn"]);
            conndb.Open();
            SqlCommand strselect = new SqlCommand("supplyinfo_select_supplyid",conndb);
            strselect.CommandType= CommandType.StoredProcedure;
            strselect.Parameters.Add("@supply_ID",spid);
            SqlDataReader reader = strselect.ExecuteReader();
            if(reader.Read())
            {
                LblId.Text=reader["Supply_Id"].ToString().Trim();
                LblTitle.Text=reader["Supply_Subject"].ToString().Trim();
                LblBigclass.Text=reader["Supply_CatID"].ToString().Trim();
                LblDesc.Text=reader["Supply_Details"].ToString().Trim();
                LblPurType.Text=reader["Supply_PurchaseType"].ToString().Trim();
                if(int.Parse(reader["Supply_Ischecked"].ToString().Trim())==1)
                {
                    LblIschk.Text="已通过审核";
                }
                else
                {
                    LblIschk.Text="没有通过审核";
                }
                if(int.Parse(reader["Supply_Isrcmd"].ToString().Trim())==1)
                {
                    LblIsrcmd.Text="已设置为推荐";
                }
                else
                {
                    LblIsrcmd.Text="没有设置为推荐";
                }
                switch(reader["Supply_Reader_Level"].ToString().Trim())
                {
                    case "0":
                        LblLevel.Text="设置所有人都可以看到此信息";
                        break;
                    case "1":
                        LblLevel.Text="设置注册会员可以看到此信息";
                        break;
                    case "2":
                        LblLevel.Text="设置VIP会员可以看到此信息";
                        break;
                }
            }
      (2)、采用SqlDataAdapter对象
                private void buycatalog()
        {
            SqlConnection conndb= new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["conn"]);
            conndb.Open();
            SqlDataAdapter  strselect = new SqlDataAdapter("productclass",conndb);

            strselect.SelectCommand.CommandType = CommandType.StoredProcedure;

            DataSet ds = new DataSet();

            strselect.Fill(ds);

            DlstBuycatalog.DataSource =ds;

            DlstBuycatalog.DataKeyField ="PdtCat_ID";

            DlstBuycatalog.DataBind();

            conndb.Close();
        }
   以上这个方法,就是通过SqlDataAdapter对像调用了SQL中存储过程productclass,通过DataSet将数据填充在ds中,同时指定DataList控件DlstBuycatalog的数据源是ds,主键是PdtCat_Id,最后再重新绑定Datalist控件.由这个方法我们可以看到用SqlDataAdapter调用存储过程中的关键是:
SqlDataAdapter  strselect = new SqlDataAdapter("productclass",conndb);
strselect.SelectCommand.CommandType = CommandType.StoredProcedure;
当存储过程中有参数时,我们又应该乍样做呢?其实这个跟SqlCommand的差不多,我们只要再加一句
Strselect.SelectCommand.Parameter.Add(“@pdt_name”,txtpdtname.Text());
就可以了,其中@pdt_name是在存储过程中声明的参数变量名,而txtpdtname.text()是在.net中赋于变量@pdt_name的值了。认真看一下下面这个存储过程就很清楚了:
由上面我们可以知道在调用存储过程中,最关键的对象是Command对象,这个对象可以通过ExecuteReader()方法执行数据查询,还可以返回一个单一值的查询,还可以通过ExecuteScalar()方法进行相关的数据统计,还可以通过ExecuteNonQuery()方法进行数据更新,增删改的执行操作,而在执行这些SQL操作时,往往是与相关的控件DataGrid ,DataList,Repeat控件结合使用的.
5、以下是几个常用的存储过程
     验证登陆
/*
用途:通过得到的@user_name @user_password验证登陆
日期:2006-3-21
*/
CREATE procedure user_login
@user_name varchar(50),
@user_password varchar(50)
as
select * from usercompany where [User_Name] = @User_Name and [User_Pwd] = @User_Password
if @@rowcount>0
begin
update  [users] set user_LoginTimes=user_LoginTimes+1 where [User_Name] = @User_Name and [User_Pwd] = @User_Password
end
GO
6、
密码修改
/*
作者:admin
用途:先查到user的密码,再修改新密码
日期:2006-3-23
*/
create procedure user_pwd
@user_name varchar(30),
@user_oldpwd varchar(30),
@user_newpwd varchar(30),
@iOutput int output
as
if exists(select * from users where User_Name=@user_name and user_pwd=@user_oldpwd)
begin
update users set user_pwd=@user_newpwd where User_Name=@user_name and user_pwd=@user_oldpwd
set @iOutput = 1
end 
else
set @ioutput = -1
GO
增加新记录
CREATE procedure gb_add
@gbusername char(50),
@gbusermemberid char(50),
@gbuseremail char(50),
@gbusersubject char(50),
@gbusercontent char(1500)
as
insert gb
(
gbusername,
gbusermemberid,
gbuseremail,
gbsubject,
gbcontent

)
values
(
@gbusername,
@gbusermemberid,
@gbuseremail,
@gbusersubject,
@gbusercontent
)
GO



Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1856228

posted @ 2007-10-30 15:07  zhangsir  阅读(361)  评论(0编辑  收藏  举报