用户登录尝试

      今天尝试开发用户登录模块!结果失败了,用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

文章未经说明均属原创,学习笔记可能有大段的引用,一般会注明参考文献。 欢迎大家留言交流,转载请注明出处。
原文地址:https://www.cnblogs.com/yhlx125/p/2389442.html