存储过程
登陆
if object_id('Admin') is not null
drop table Admin
go
--创建Admin表
create table Admin
(
_id int identity(1000,1),--编号,自动增长
_name nvarchar(50),--名字
_pwd nvarchar(50),--密码
_lastlogintime datetime,--最后一次登录时间
_lastloginip nvarchar(50)--最后一次登陆的IP
constraint Admin__id_FK primarykey(_id)--主键
)
go
--插入一条数据
insert into Admin(_name,_pwd,_lastlogintime,_lastloginip) values('哈哈','1476',getdate(),'127.0.0.1')
go
--查看表
--select * from Admin
--go
if object_id('_Login') is not null
drop procedure _Login
go
create procedure _Login(@_name nvarchar(50)) as
begin
select * from Admin where_name=@_name
end
go
--execute _Login '哈哈'
--go
--sp_help '_Login'
--go
这个登录使用用户名和密码
_name,_pwd
在DAL中写一个方法
这个方法返回的是一个实体(Model)
helper_help = new helper_();
public AdminModelExec_Admin_LoginDAL(string strName)
{
SqlParameter[]par =
{
help.CreateInputParameter("@_name", SqlDbType.VarChar,50,strName)
};
SqlDataReaderdataReader = null;
try
{
help.ToDoProc("_Login", par, outdataReader);
}
catch(Exception ex)
{
thrownew Exception(ex.Message);
}
AdminModeladminModel = new AdminModel();
if(dataReader.HasRows)
{
while(dataReader.Read())
{
adminModel.Id = Convert.ToInt32(dataReader["_id"]);
adminModel.Name =dataReader["_name"].ToString();
adminModel.Pwd=dataReader["_pwd"].ToString();
adminModel.Lastlogintime=DateTime.Parse(dataReader["_lastlogintime"].ToString());
adminModel.Lastloginip=dataReader[4].ToString();
}
}
dataReader.Dispose();
returnadminModel;
}
说明:执行登陆的存储过程可定会有参数的,参数就是那个@_name,这里返回的是一个实体的原因就是在表示层进行文本框中的输入的值和这个实体中相对应属性的值的一个比较,如果数据符合要求就登陆成功
接着说明一下这个方法,这个方法定义的时候返回的是Model实体,方法本身带参数,这个参数对应着数据库中存储过程定义的参数的value值
所要执行的的存储过程带有一个参数,调用存储过程之前就要声明参数,helper中自定义参数是一个参数数组,所以这里不管是几个参数都要定义成参数数组的,既然是自定义的参数那么自定义参数方法中的形参必须实现
接着就是定义ADO.NET中的对象来实现存储过程的执行以及接收返回的结果集之类的
定义完之后就是执行了,这个上面很明显执行的也是自定义的相应的方法的,所以形参也要全部实现,实现的时候有很重要的一点就是,这个自定义执行的方法有一个形参是out或者是ref的,那么就要定义相应的类型去接收这个后面的
这里是SqlDataReader
只度指向前的数据流,所以就要讲读到的结果读出来存在实体中然后是返回实体
在BLL层
只需要往上抛就行了
AdminDALadminDal = new AdminDAL();
public AdminModelExec_Admin_LoginBLL(string strName)
{
returnadminDal.Exec_Admin_LoginDAL(strName);
}
在表示层
protected void btnLogin_Click(objectsender, EventArgs e)
{
adminModel =adminBll.Exec_Admin_LoginBLL(txtUserName.Text.ToString());
stringstrValidate = Session["str"].ToString();
if(Page.IsValid)
{
if(adminModel.Name ==txtUserName.Text.ToString())
{
if(adminModel.Pwd == txtPassWord.Text.ToString())
{
if (TextBox1.Text.ToString() == strValidate)
{
Session["AdminName"] = adminModel.Name;
//获取登陆管理员的ID
Session["AdminID"] = adminModel.Id;
Response.Write(Session["AdminID"]);
//先出去../在写FrameSet.aspx页面的路径
ClientScript.RegisterStartupScript(this.GetType(),"", "<script>alert('登陆成功!');location='../Main/FrameSet.htm';</script>");
}
else
{
ClientScript.RegisterStartupScript(this.GetType(),"", "<script>alert('验证码错误!');location='Login.aspx';</script>");
}
}
else
{
ClientScript.RegisterStartupScript(this.GetType(),"", "<script>alert('密码错误!');location='Login.aspx';</script>");
}
}
else
{
ClientScript.RegisterStartupScript(this.GetType(),"", "<script>alert('用户名不存在!');location='Login.aspx';</script>");
}
}
}
执行方法参数已经在第一行已将指明,也就是根据这个文本框中的值去查询数据库表中的记录,姜茶道的结果给实体,再通过实体对应的属性去讲要进行判断的内容进行判断,如果与数据库表中的数据符合就登陆成功