WebForm登录页面传值(连接数据库)

登录页面:

输入正确的账户密码后,将数据库中的姓名,电话,性别,以及角色,邮箱传递到第二个页面

WebForm登录页面传值(连接数据库)_第1张图片

数据库部分代码:需要传递的字段在这两个表中

create table User1 (
   UserID               int                  identity,
   UserName             varchar(20)          not null,
   Sex                  tinyint              null,
   Account              varchar(20)          not null,
   Password             varchar(100)         not null,
   Phone                varchar(20)          null,
   Email                varchar(50)          null,
   RoleID               int                  not null,
   CheckInTime          datetime             not null,
   IsDelete             tinyint              not null,
   AlterTime            datetime             not null,
   constraint PK_USER1 primary key (UserID)
)
create table Role1 (
   RoleID               int                  identity,
   RoleName             nvarchar(50)         null,
   RolePurview          nvarchar(50)         null,
   constraint PK_ROLE1 primary key (RoleID)
)
go

我们需要引入命名空间

using System.Data;
using System.Data.SqlClient;
using System.Data.Sql;

第一种方式:

利用SqlDataReader读取,是一种在线读取的方式,SqlDataReader 基于连接,只读访问 适合数据量较小。SqlDataReader返回的是一个数据读写器,只能一条条的读。

两个页面之间传值利用session进行传值。

第一个页面代码:

            string name = TextBox1.Text.Trim();
            string pwd = TextBox2.Text;
            //连接数据库
            string sqlcoon = "Data Source=.;Initial Catalog=logis;Integrated Security=True";
            string sql = string.Format("select * from User1,Role1 where User1.RoleID=Role1.RoleID and Account=@Account and Password=@Password_", name, pwd);//查询是否有该条记录,根据账户密码
            SqlParameter[] par = {
                new SqlParameter("@Account",name),
                   new SqlParameter("@Password_",pwd)

            };
            using (SqlConnection con = new SqlConnection(sqlcoon))
            {
                using (SqlCommand com = new SqlCommand(sql, con))
                {
                    com.Parameters.AddRange(par);
                    //打开连接
                    con.Open();
                    //SqlDataReader,执行查询,using是释放SqlDataReader
                    using (SqlDataReader reader = com.ExecuteReader())
                    {
                        //判断是否有数据
                        if (reader.HasRows)
                        {
                            //判断是否前进到下一行
                            if (reader.Read())
                            {
                                //获取到姓名的值
                                string id = reader["UserName"].ToString();
                                Session["id"] = id;
                                //获取到性别的值
                                int sex = Convert.ToInt32(reader["Sex"]);
                                string sex1 = "";
                                if (sex == 1)
                                {
                                    sex1 = "男";
                                    Session["sex1"] = sex1;
                                }
                                else
                                {
                                    sex1 = "女";
                                    Session["sex1"] = sex1;
                                }
                                //获取到角色
                                string role = reader["RoleName"].ToString();
                                Session["role"] = role;
                                //获取到电话号码
                                string Phone = reader["Phone"].ToString();
                                Session["Phone"] = Phone;
                                //获取到邮箱
                                string Email = reader["Email"].ToString();
                                Session["Email"] = Email;
                                //跳转页面
                                Response.Redirect("开票界面.aspx");
                            }

                        }
                        else
                        {
                            Label1.Text = "账户名或密码不正确";
                        }
                    }
                }
            }

第二个页面代码:

  //Label1.Text = Session["id"].ToString();
            //Label2.Text = Session["sex1"].ToString();
            //Label3.Text = Session["role"].ToString();
            //Label4.Text = Session["Phone"].ToString();
            //Label5.Text = Session["Email"].ToString();  

第二种方式:

利用SqlDataAdapter读取,是离线读取,SqlDataAdapter 基于非连接,适于数据量较大时,可以另行修改,最后再把修改结果返回给数据库。要求资源也大一点,SqlDataAdapter返回的是数据集或者表,可以对其中的数据作任意操作。

利用session传值,存在服务器,当我们写多个session时,会造成服务器的压力,所以我们需要将数据库中的姓名,电话,性别,以及角色,邮箱封装在一个类中,利用session将这个方法传递过去,也就是将这些字段传递过去了。

CurrUser 类代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace WebApplication1
{
    public class CurrUser
    {
        public string  UserName { get; set; }
        public string Phone { get; set; }

        public string Role { get; set; }

        public string Email { get; set; }

        public string Sex { get; set; }
        public int  UserId { get; set; }
    }
}

第一个页面代码:

            //获取到用户名
            string name = TextBox1.Text.Trim();
            //获取到密码
            string pwd = TextBox2.Text;
            //连接数据库
            string sqlcoon = "Data Source=.;Initial Catalog=logis;Integrated Security=True";
            string sql = string.Format("select UserName,Sex,Phone,Email,Role1.RoleName from User1,Role1 where User1.RoleID=User1.RoleID and Account=@Account and Password=@Password_");//查询是否有该条记录,根据账户密码
            SqlParameter[] par = {
                new SqlParameter("@Account",name),
                   new SqlParameter("@Password_",pwd)

            };
            //实例化SqlDataAdapter适配器,using释放SqlDataAdapter
            using (SqlDataAdapter sda = new SqlDataAdapter(sql, sqlcoon))
            {
                //将字段添加进SqlDataAdapter对象中
                sda.SelectCommand.Parameters.AddRange(par);
                //实例化DataTable对象
                DataTable table = new DataTable();
                sda.Fill(table);
                //判断是否有数据,有数据说明用户名密码正确
                if (table.Rows.Count > 0)
                {
                    //实例化第一行数据
                    DataRow Row = table.Rows[0];
                    CurrUser curr = new WebApplication1.CurrUser();
                    curr.Email = Row["Email"].ToString();
                    curr.Phone = Row["Phone"].ToString();
                    curr.Role = Row["RoleName"].ToString();
                    curr.Sex = Convert.ToInt32(Row["Sex"]) == 0 ? "男" : "女";
                    curr.UserName = Row["UserName"].ToString();
                    Session["info"] = curr;
                    Response.Redirect("开票界面.aspx");

                }
                else
                {
                    Label1.Text = "账户名或密码不正确";
                }
            }


第二个页面代码:

            CurrUser curr = new CurrUser();
            curr = Session["info"] as CurrUser;
            if (curr != null)
            {
                Label1.Text = curr.UserName;
                Label2.Text = curr.Sex;
                Label3.Text = curr.Role;
                Label4.Text = curr.Phone;
                Label5.Text = curr.Email;
            }

第三种方式:

当我们用第二种方法利用session将数据库中的姓名,电话,性别,以及角色,邮箱传值到第二个页面时,如果我们改变了性别为男,但是session传的值是女。

但是我们只将User1表的主键传到第二个页面,利用主键查询数据并输出就解决了这个问题。同时封装一个DBHelper类

CurrUser 类代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace WebApplication1
{
    public class CurrUser
    {
        public string  UserName { get; set; }
        public string Phone { get; set; }

        public string Role { get; set; }

        public string Email { get; set; }

        public string Sex { get; set; }
        public int  UserId { get; set; }
    }
}

DBHelper类代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data;
using System.Data.SqlClient;
using System.Data.Sql;
namespace WebApplication1
{
    public class DBHelper
    {
       private readonly static string config = "Data Source=.;Initial Catalog=logis;Integrated Security=True";
        /// 
        /// 查询
        /// 
        /// 
        /// 
        public static DataTable Query(string sql, SqlParameter[] par)
        {
            using (SqlDataAdapter sda = new SqlDataAdapter(sql, config))
            {
                sda.SelectCommand.Parameters.AddRange(par);
                DataTable dt = new DataTable();
                sda.Fill(dt);
                return dt;
            }

        }
        /// 
        /// 查询首行首列
        /// 
        /// T-Sql语句
        /// 第一行第一列的值
        public static int ExecuteScalar(string safeSql,SqlParameter[] par)
        {
            using (SqlConnection Connection = new SqlConnection(config))
            {
                if (Connection.State != ConnectionState.Open)
                    Connection.Open();
                SqlCommand cmd = new SqlCommand(safeSql, Connection);
                cmd.Parameters.AddRange(par);
                int result = Convert.ToInt32(cmd.ExecuteScalar());
                return result;
            }
    }/// 
     /// 创建数据读取器 SqlDataReader
     /// 
     /// 
     /// 
     /// 
        public static SqlDataReader ExecuteReader(string sql, SqlParameter[] par)
        {
            using (SqlConnection Connection = new SqlConnection(sql))
            {
                if (Connection.State != ConnectionState.Open)
                    Connection.Open();
                using (SqlCommand cmd = new SqlCommand(sql, Connection))
                { 
                    cmd.Parameters.AddRange(par);
                SqlDataReader reader = cmd.ExecuteReader();
                return reader;
            }
        }
         }
    /// 
    /// 增删改
    /// 
    /// 
    public static void feiquery(string sql)
        {
            SqlConnection con = new SqlConnection(config);
            con.Open();
            SqlCommand com = new SqlCommand(sql, con);
            com.ExecuteNonQuery();
            con.Close();
        }
    }
}

第一个页面代码:

    //获取到用户名
            string name = TextBox1.Text.Trim();
            //获取到密码
            string pwd = TextBox2.Text;
            string sql = string.Format("select UserName,Sex,Phone,Email,Role1.RoleName,User1.UserID from User1,Role1 where User1.RoleID=User1.RoleID and Account=@Account and Password=@Password_");//查询是否有该条记录,根据账户密码
            SqlParameter[] par = {
                new SqlParameter("@Account",name),
                   new SqlParameter("@Password_",pwd)


            };
         DataTable table=DBHelper.Query(sql,par);
            
                //判断是否有数据,有数据说明用户名密码正确
                if (table.Rows.Count > 0)
                {
                    //实例化第一行数据
                    DataRow Row = table.Rows[0];
                    CurrUser curr = new WebApplication1.CurrUser();
                    curr.UserId = Convert.ToInt32(Row["UserID"]);
                    Session["info"] = curr;
                    Response.Redirect("开票界面.aspx");


                }
                else
                {
                    Label1.Text = "账户名或密码不正确";
                }


第二个页面代码:

            CurrUser curr = new CurrUser();
            curr = Session["info"] as CurrUser;
            if (curr != null)
            {

                int id = curr.UserId;
                string sql = string.Format("select UserName,Sex,Phone,Email,Role1.RoleName,User1.UserID from User1,Role1 where User1.RoleID=User1.RoleID and User1.UserID=@UserID  ");//查询是否有该条记录,根据账户密码
                SqlParameter[] par = {
                new SqlParameter("@UserID",id)
            };
                DataTable table= DBHelper.Query(sql, par);
                    //判断是否有数据,有数据说明用户名密码正确
                    if (table.Rows.Count > 0)
                    {
                        //实例化第一行数据
                        DataRow Row = table.Rows[0];
                        // CurrUser curr1 = new WebApplication1.CurrUser();
                        Label5.Text = Row["Email"].ToString();
                        Label4.Text = Row["Phone"].ToString();
                        Label3.Text = Row["RoleName"].ToString();
                        Label2.Text = Convert.ToInt32(Row["Sex"]) == 0 ? "男" : "女";
                        Label1.Text = Row["UserName"].ToString();



                    }
               

            }


你可能感兴趣的:(ado.net)