C# windows应用窗体 登录界面不同角色用户进行登录

mayo_software 2017-06-13 09:07:39
怎样根据数据库中不同权限的角色在登录界面实现登录?
我有三个角色 管理员 员工(只能做查询C表) 部门经理(只能修改W表和查询C表)
登录界面怎么写啊?
...全文
1602 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
IEEE_China 2017-06-13
  • 打赏
  • 举报
回复
简单写一下表、账号类等。。 只是做一个Demo,所以密码加密之类的省略了,权限等也一切从简。

----权限表
CREATE TABLE [dbo].[Table_Role](
	[RoleId] [int] IDENTITY(1,1) primary key NOT NULL,
	[Title] [nvarchar](50) NULL
)

---账户表
CREATE TABLE [dbo].[Table_User](
	[UserID] [int] IDENTITY(1,1) primary key NOT NULL,
	[LoginName] [nvarchar](50) NULL,
	[Password] [nvarchar](50) NULL,
	[UserName] [nvarchar](50) NULL
	)

----账号权限表
CREATE TABLE [dbo].[Table_UserRole](
	[URID] [int] IDENTITY(1,1) Primary key NOT NULL,
	[UserID] [int] NULL,
	[RoleID] [int] NULL
)

-----为了省事,我用了视图
-----视图

CREATE VIEW [dbo].[View_UserRole]
AS
SELECT     dbo.Table_Role.RoleId, dbo.Table_Role.Title, dbo.Table_UserRole.URID, dbo.Table_UserRole.UserID,
                      dbo.Table_User.LoginName, dbo.Table_User.Password, dbo.Table_User.UserName
FROM         dbo.Table_Role INNER JOIN
                      dbo.Table_UserRole ON dbo.Table_Role.RoleId = dbo.Table_UserRole.RoleID 
                      INNER JOIN
                      dbo.Table_User ON dbo.Table_UserRole.UserID = dbo.Table_User.UserID

//----------------------------
 /// <summary>
    /// 数据库连接
    /// </summary>
    public class SqlConn
    {
        SqlConnection connection;
        public SqlConnection Connection { get { return connection; } }
        public SqlConn()
        {

            string connectionstring = ConfigurationManager.ConnectionStrings["connectionString"].ConnectionString;
            connection = new SqlConnection(connectionstring);
        }
    }

//---------------
//SqlHelper类 太长,省略。。。。

//----------------------------------
    /// <summary>
    /// 权限类
    /// </summary>
   public  class Role
    {
        public string  RoleID { get; set; }
        public string Title { get; set; }
    }
///---------------------------
    /// <summary>
    /// 账号类
    /// </summary>
    public class Account
    {
        /// <summary>
        /// 账号ID
        /// </summary>
        public string UserID { get; set; }
        /// <summary>
        /// 登录账号
        /// </summary>
        public string LoginName { get; set; }
        /// <summary>
        /// 密码
        /// </summary>
        public string Password { get; set; }
        /// <summary>
        /// 姓名
        /// </summary>
        public string UserName { get; set; }
       
        private List<Role> roleList;
        /// <summary>
        /// 权限
        /// </summary>
        public List<Role> RoleList { get { return roleList; } }

        /// <summary>
        /// 获取账号信息
        /// </summary>
        /// <param name="loginName"></param>
        /// <param name="password"></param>
        /// <returns></returns>
        public    Account GetAccount(string loginName, string password)
        {
            Account account = null;
            roleList = new List<Role>();
            string sql = @"SELECT 
                             [RoleId]
                            ,[Title]
                            ,[URID]
                            ,[UserID]
                            ,[LoginName]
                            ,[Password]
                            ,[UserName] 
                        FROM [View_UserRole] 
                        WHERE LoginName=@loginName and Password=@password";
            SqlParameter[] parameters = new SqlParameter[] {
                new SqlParameter("@loginName",loginName),
                new SqlParameter("@password",password)
            };

            /// SqlHelper查询,获取DataTable
            using (DataTable dt = SqlHelper.ExecuteDatatable(new SqlConn().Connection, CommandType.Text, sql, parameters))
            {
                
                if (dt != null && dt.Rows.Count > 0)
                {
                    account = new Account();
                    account.UserID = dt.Rows[0]["UserID"].ToString();
                    account.LoginName = dt.Rows[0]["LoginName"].ToString();
                    account.Password = dt.Rows[0]["Password"].ToString();
                    account.UserName = dt.Rows[0]["UserName"].ToString();
                    for(int i=0;i<dt.Rows.Count;i++)
                    {
                        //  权限
                        Role role = new Role();
                        role.RoleID = dt.Rows[i]["RoleID"].ToString();
                        role.Title  = dt.Rows[i]["Title"].ToString();
                        account.roleList.Add(role);
                    }
                    
                }
                return account;
               
            }


        }
     
    }


mayo_software 2017-06-13
  • 打赏
  • 举报
回复
或者 密码错误 怎么写成触发器?
mayo_software 2017-06-13
  • 打赏
  • 举报
回复
引用 1 楼 Imaor 的回复:

 /// <summary>
        /// 登录
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button1_Click(object sender, EventArgs e)
        {
            string loginname = textBox1.Text.Trim();    //账号
            string password = textBox2.Text.Trim();     //密码
            if (loginname == "" || password == "")
            {
                MessageBox.Show("用户名或密码不能为空");
                return;
            }
            //  通过登录名及密码获取账号信息
            Account account = new Account().GetAccount(loginname, password);
            string message = string.Empty;
            if (account != null)
            {
                if (account.RoleList != null)
                {
                    if (account.RoleList.Count > 0)
                    {
                        var list = from m in account.RoleList select m.Title;
                        message = string.Join(",", list);
                        MessageBox.Show("当前登录员工的权限如下:" + message);
                        //登录成功,按权限处理
                    }
                    else
                    {
                        MessageBox.Show("该账号无权限");
                        //按无权限处理
                    }
                }
                else
                {
                    MessageBox.Show("该账号权限为NULL,请联系管理员处理");
                }
            }
            else
            {
                MessageBox.Show("账号或密码错误,登录失败");
            }
        }
感谢!账号和密码为空的那几行代码 请问 改成触发器 应该怎么写啊?
IEEE_China 2017-06-13
  • 打赏
  • 举报
回复

 /// <summary>
        /// 登录
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button1_Click(object sender, EventArgs e)
        {
            string loginname = textBox1.Text.Trim();    //账号
            string password = textBox2.Text.Trim();     //密码
            if (loginname == "" || password == "")
            {
                MessageBox.Show("用户名或密码不能为空");
                return;
            }
            //  通过登录名及密码获取账号信息
            Account account = new Account().GetAccount(loginname, password);
            string message = string.Empty;
            if (account != null)
            {
                if (account.RoleList != null)
                {
                    if (account.RoleList.Count > 0)
                    {
                        var list = from m in account.RoleList select m.Title;
                        message = string.Join(",", list);
                        MessageBox.Show("当前登录员工的权限如下:" + message);
                        //登录成功,按权限处理
                    }
                    else
                    {
                        MessageBox.Show("该账号无权限");
                        //按无权限处理
                    }
                }
                else
                {
                    MessageBox.Show("该账号权限为NULL,请联系管理员处理");
                }
            }
            else
            {
                MessageBox.Show("账号或密码错误,登录失败");
            }
        }
IEEE_China 2017-06-13
  • 打赏
  • 举报
回复
C#中调用触发器? 只是删除数据的话,直接写SQL语句,或者调用存储过程就行了。

///-------winform调用
 /// <summary>
        /// 调用存储过程
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button2_Click(object sender, EventArgs e)
        {
            string id = textBox3.Text.Trim();
            if(id!="")
            {
                Account account = new Account();
                int ret=account.DelAccountWithStoredProcedure(id);
                string msg = string.Format("删除了{0}个员工",ret);
                MessageBox.Show(msg);
            }
            
            
        }
        /// <summary>
        /// SQL语句
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button3_Click(object sender, EventArgs e)
        {
            string id = textBox3.Text.Trim();
            if (id != "")
            {
                Account account = new Account();
                int ret = account.DelAccount(id);
                string msg = string.Format("删除了{0}个员工", ret);
                MessageBox.Show(msg);
            }
        }
//-----------------------
  /// <summary>
        /// 方法1:删除账号,SQL
        /// </summary>
        /// <param name="id"></param>
        /// <returns>影响行数</returns>
        public int DelAccount(string id)
        {
            string sql = @"DELETE FROM[Table_User]
                        WHERE UserID = @UserID";
            SqlParameter[] parameters = new SqlParameter[] {
                new SqlParameter("@UserID",id) 
            };
            //  执行命令,返回影响行数
            int retval = SqlHelper.ExecuteNonQuery(new SqlConn().Connection, CommandType.Text, sql, parameters);
            return retval;
        }
        /// <summary>
        /// 方法2:使用存储过程删除账号
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public int DelAccountWithStoredProcedure(string id)
        {
          
            SqlParameter[] parameters = new SqlParameter[] {
                new SqlParameter("@UserID",id)
            };
            //  执行命令,返回影响行数
            int retval = SqlHelper.ExecuteNonQuery(new SqlConn().Connection, CommandType.StoredProcedure, "P_DelUser", parameters);
            return retval;
        }

-----C#使用存储过程删除数据,用到的存储过程
-- =============================================
-- Author:		<Author,,Name>
-- Create date: <Create Date,,>
-- Description:	<Description,,>
-- =============================================
CREATE PROCEDURE P_DelUser 
	-- Add the parameters for the stored procedure here
	@UserID int
AS
BEGIN
	 DELETE FROM Table_User WHERE UserID=@UserID
END
二月十六 版主 2017-06-13
  • 打赏
  • 举报
回复
权限不应该在登录页面体现吧?应该是登录之后去数据库中获取该登录人的对应的权限
mayo_software 2017-06-13
  • 打赏
  • 举报
回复
引用 4 楼 Imaor 的回复:
简单写一下表、账号类等。。 只是做一个Demo,所以密码加密之类的省略了,权限等也一切从简。

----权限表
CREATE TABLE [dbo].[Table_Role](
	[RoleId] [int] IDENTITY(1,1) primary key NOT NULL,
	[Title] [nvarchar](50) NULL
)

---账户表
CREATE TABLE [dbo].[Table_User](
	[UserID] [int] IDENTITY(1,1) primary key NOT NULL,
	[LoginName] [nvarchar](50) NULL,
	[Password] [nvarchar](50) NULL,
	[UserName] [nvarchar](50) NULL
	)

----账号权限表
CREATE TABLE [dbo].[Table_UserRole](
	[URID] [int] IDENTITY(1,1) Primary key NOT NULL,
	[UserID] [int] NULL,
	[RoleID] [int] NULL
)

-----为了省事,我用了视图
-----视图

CREATE VIEW [dbo].[View_UserRole]
AS
SELECT     dbo.Table_Role.RoleId, dbo.Table_Role.Title, dbo.Table_UserRole.URID, dbo.Table_UserRole.UserID,
                      dbo.Table_User.LoginName, dbo.Table_User.Password, dbo.Table_User.UserName
FROM         dbo.Table_Role INNER JOIN
                      dbo.Table_UserRole ON dbo.Table_Role.RoleId = dbo.Table_UserRole.RoleID 
                      INNER JOIN
                      dbo.Table_User ON dbo.Table_UserRole.UserID = dbo.Table_User.UserID

//----------------------------
 /// <summary>
    /// 数据库连接
    /// </summary>
    public class SqlConn
    {
        SqlConnection connection;
        public SqlConnection Connection { get { return connection; } }
        public SqlConn()
        {

            string connectionstring = ConfigurationManager.ConnectionStrings["connectionString"].ConnectionString;
            connection = new SqlConnection(connectionstring);
        }
    }

//---------------
//SqlHelper类 太长,省略。。。。

//----------------------------------
    /// <summary>
    /// 权限类
    /// </summary>
   public  class Role
    {
        public string  RoleID { get; set; }
        public string Title { get; set; }
    }
///---------------------------
    /// <summary>
    /// 账号类
    /// </summary>
    public class Account
    {
        /// <summary>
        /// 账号ID
        /// </summary>
        public string UserID { get; set; }
        /// <summary>
        /// 登录账号
        /// </summary>
        public string LoginName { get; set; }
        /// <summary>
        /// 密码
        /// </summary>
        public string Password { get; set; }
        /// <summary>
        /// 姓名
        /// </summary>
        public string UserName { get; set; }
       
        private List<Role> roleList;
        /// <summary>
        /// 权限
        /// </summary>
        public List<Role> RoleList { get { return roleList; } }

        /// <summary>
        /// 获取账号信息
        /// </summary>
        /// <param name="loginName"></param>
        /// <param name="password"></param>
        /// <returns></returns>
        public    Account GetAccount(string loginName, string password)
        {
            Account account = null;
            roleList = new List<Role>();
            string sql = @"SELECT 
                             [RoleId]
                            ,[Title]
                            ,[URID]
                            ,[UserID]
                            ,[LoginName]
                            ,[Password]
                            ,[UserName] 
                        FROM [View_UserRole] 
                        WHERE LoginName=@loginName and Password=@password";
            SqlParameter[] parameters = new SqlParameter[] {
                new SqlParameter("@loginName",loginName),
                new SqlParameter("@password",password)
            };

            /// SqlHelper查询,获取DataTable
            using (DataTable dt = SqlHelper.ExecuteDatatable(new SqlConn().Connection, CommandType.Text, sql, parameters))
            {
                
                if (dt != null && dt.Rows.Count > 0)
                {
                    account = new Account();
                    account.UserID = dt.Rows[0]["UserID"].ToString();
                    account.LoginName = dt.Rows[0]["LoginName"].ToString();
                    account.Password = dt.Rows[0]["Password"].ToString();
                    account.UserName = dt.Rows[0]["UserName"].ToString();
                    for(int i=0;i<dt.Rows.Count;i++)
                    {
                        //  权限
                        Role role = new Role();
                        role.RoleID = dt.Rows[i]["RoleID"].ToString();
                        role.Title  = dt.Rows[i]["Title"].ToString();
                        account.roleList.Add(role);
                    }
                    
                }
                return account;
               
            }


        }
     
    }


感谢回复 请问下用C#怎么实现触发器啊? 我数据库里有一个触发器 ALTER trigger [dbo].[删除员工] on [dbo].[C] for delete as declare @msg varchar(25) select @msg=str(@@rowcount)+'个员工已经被删除' select @msg return 在窗口里如何使用啊?

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧