• 用户登录尝试


          今天尝试开发用户登录模块!结果失败了,用Access开发,本来希望能实现ORM映射的,但是发现用在用户登录这一块太复杂。而且如果要管理用户,添加删除修改,用DataTable存储查询结果,并将数据源绑定到DataGridView明显更加方便!可能是我没有习惯吧!

      这里参考了一个五层设计:数据操作层,对象,关系对象映射、业务、界面。感觉还是比较复杂,不过好处不言而喻。而且这样都能够使编程傻瓜化!

      http://www.cnblogs.com/BudEasyCode/archive/2012/03/03/2378227.html

      明天继续弄!(19:58:06)

      用别人写的类不习惯,应该有两方面原因:别人写的类不能完全满足要求,写的不太合理;其二就是自己用的太少。

      把登录的代码写在MainForm_Load事件中还是写在Program中Main主函数中?我现在也不知道到底哪一种好。似乎应该写在Main函数中。不过如果写一个Controller,将登录和主窗体作为他的变量,通过Controller函数了控制应该会容易很多吧!MVC这样的机制还是应该学习一下的。(09:16:27)

      OleDbDataAdaper.Update(DataSet ds,TableName name) 总是报"Insert Into 的语句语法错误",解决方法。        http://www.cnblogs.com/chorrysky/archive/2008/12/24/712042.html

       OleDbDataAdapter oleSub=new OleDbDataAdapter(sql,oleCn);
        OleDbCommandBuilder cb1=new OleDbCommandBuilder(oleSub);

      cb1.QuotePrefix="[";
      cb1.QuoteSuffix="]";(16:46:03)

    这里写两段代码希望比较一下下面的几种登录方法:

    1. 初始化MainForm的Load事件是验证登录

    2. 在Main函数中验证登录,如果登录成功运行Application.Run(New MainFrom());否则return;

    3. Main函数中运行Application.Run(new Login());在Login的登录按钮点击时验证,成功则Login窗体Hide()接着MainForm.show();

    这三种方法都需要将用户的登录信息传入主窗体,进而定制用户菜单。

    那种用户登录的方式更好。首先是数据库Users表设计,(如果是基于角色的权限管理,显然还应该有两张表即角色表、角色功能对照表和功能表这里先不搞那么复杂):

    字段名称 字段描述 字段类型  
    User_id 用户编号 int  
    User_name 用户名 VarChar(64)  
    PassWord 用户密码 VarChar(64)  
    Role 角色 int

                           

    第一种方法分析:因为在MainForm执行Load事件之前,构造函数已经执行(通过执行InitialComponent函数实现),所以通过IDE设计的主窗体的用户界面已经存在,用户登录会受影响。不过如果通过配置文件构造窗体,这个应该也能够满足要求,显示给用户一个空的主窗体。

    第二种方法代码:

    /// <summary>
    /// 应用程序的主入口点。
    /// </summary>
    [STAThread]
    static void Main()
    {
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    OleDbMeans.OleConnStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\\Floor.mdb";
    #region 登录
    login m_login = new login();
    if (m_login.ShowDialog() != DialogResult.OK)
    {
    return;
    }
    #endregion
    Splasher.Show();
    Application.Run(new MainFrm(m_login.User));
    Splasher.Close();
    }
    登录窗体代码
    using System; 
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.Data.SqlClient;
    using WinDbMeans;
    using System.Data.OleDb;
    namespace HouseMange
    {
    public partial class login : Form
    {
    user m_User = new user();
    public user User
    {
    get { return m_User; }
    //set { m_User = value; }
    }
    //private bool IsSuccess = false;//登录是否成功

    //public bool IsLoginSuccess
    //{
    // get { return IsSuccess; }
    ////set { IsSuccess = value; }
    //}

    public login()
    {
    InitializeComponent();
    }
    private void login_Load(object sender, EventArgs e)
    {
    }
    private void Login_in_Click(object sender, EventArgs e)
    {
    OleDbMeans m_OleDbMeans = new OleDbMeans();
    m_OleDbMeans.Open();
    if (textName.Text != "" && textPass.Text != "")
    {
    OleDbDataReader temDR = m_OleDbMeans.SelectInfo("select * from Users where User_name='" + textName.Text.Trim() + "' and PassWord='" + textPass.Text.Trim() + "'");
    bool ifcom = false;
    if (temDR != null && temDR.HasRows)
    {
    ifcom = temDR.Read();
    }
    if (ifcom)
    {
    m_User.UserName = textName.Text;
    m_User.UserType = temDR.GetString(2);
    m_OleDbMeans.Close();
    //IsSuccess = true;
    this.DialogResult = DialogResult.OK;
    }
    else
    {
    labelX1.Text="提示:用户名或密码错误!";
    textName.Text = "";
    textPass.Text = "";
    }
    m_OleDbMeans.Close();
    }
    else
    {
    labelX1.Text = "提示:请将登录信息添写完整!";
    }
    }

    private void button2_Click(object sender, EventArgs e)
    {
    //IsSuccess = false;
    this.DialogResult= DialogResult.Cancel;
    }
    }
    public class user
    {
    //private string userId;
    //public string UserId
    //{
    // get { return userId; }
    // set { userId = value; }
    //}
    private string userName;

    public string UserName
    {
    get { return userName; }
    set { userName = value; }
    }
    private string userType;

    public string UserType
    {
    get { return userType; }
    set { userType = value; }
    }
    }
    }

    第三种方法代码:在《C#项目开发案例全程实录》一书中大量使用了这一方法。

    这种方法因为MainFrom是Login窗体的一个局部变量,所以在主窗体退出时,Login窗体仍然没有销毁,所以需要强制退出!

    下面参考别人的做法:(15:02:09)

     http://www.cnblogs.com/singlex/archive/2011/12/05/2276961.html

     http://www.cnblogs.com/voodooq/archive/2004/08/31/38002.html

    http://www.cnblogs.com/iambetter/archive/2012/01/14/2322156.html

    http://www.cnblogs.com/ou444/archive/2011/09/13/2174911.html

    文章未经说明均属原创,学习笔记可能有大段的引用,一般会注明参考文献。 欢迎大家留言交流,转载请注明出处。
  • 相关阅读:
    iOS 后台定位
    关于烂代码的那些事
    APP上线前,如何做运营推广工作?
    iOS图片折叠效果:Layer的contentsRect属性和渐变层
    iOS中几种数据持久化方案:我要永远地记住你!
    iOS-CoreLocation:无论你在哪里,我都要找到你!
    轻松学习之 IMP指针的作用
    iOS之友盟错误统计解决
    文字渐变效果:图层中的mask属性
    如何坚持每周写一篇博客
  • 原文地址:https://www.cnblogs.com/yhlx125/p/2389442.html
Copyright © 2020-2023  润新知