练习1:用command和Connection实现系统登录界面
问题
一般的程序都需要登录后才能使用,登录时应提供用户名、密码和身份类型。
说明
本程序采用SqlServer做为数据库。数据库中有一张表名为:recordInfo,用来记录注册用户的信息;表中有3个字段,分别是id(用户名),pwd(密码),type(类型)。
分析
首先使用以下命名空间:
using System.Data;
using System.Data. SqlClient;
用以下方式创建Connection和Command对象,以便在.NET中操作SqlServer数据库。
// 创建Connection 对象
stringconnString = "Data Source=.;Initial Catalog=MySchool;UserID=sa;pwd=sa";
SqlConnection connection = new SqlConnection(connString);
// 创建Command 对象
SqlCommand command = new SqlCommand(sql, connection);
由于返回的是记录数,所以使用Command对象的ExecuteScalar ()方法执行该命令。
解决方案:
(1)在SqlServer中创建“MySchool”数据库。添加一个表名为recordInfo的新表,添加3列:id(用户名),pwd(密码),type(类型)。
(2)向新表recordInfo中添加几行示例数据。
(3)打开VisualStudio .NET 2005 IDE并新建一个名为ConnectStr的Windows应用程序项目。
(4)将Form1.cs文件重命名为LoginForm.cs。
(5)拖动工具箱中的控件,设计如图所示的窗体。
(6)添加两个按钮的Click事件,程序代码如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
//添加名空间
using System.Data;
using System.Data.SqlClient;
namespace ConnectStr
{
public partial class LoginForm : Form
{
//定义LoginForm全局变量
string name;
string type;
public LoginForm()
{
InitializeComponent();
}
private void label2_Click(object sender, EventArgs e)
{
}
private void btnLogIn_Click(object sender, EventArgs e)
{
bool isValidUser = false; // 标识是否为合法用户
// 如果验证通过,就显示相应的用户窗体,并将当前窗体设为不可见
if (ValidateInput())
{
// 调用用户验证方法
isValidUser = ValidateUser(cboLogInType.Text,txtLogInId.Text,txtLogInPwd.Text);
// 如果是合法用户,显示相应的窗体
if (isValidUser)
{
// 将输入的用户名保存到全局变量中
name = txtLogInId.Text;
// 将选择的登录类型保存到全局变量中
type = cboLogInType.Text;
ShowUserForm(); // 显示相应用户的主窗体
}
}
}
// 验证用户是否进行了输入和选择
private bool ValidateInput()
{
if (txtLogInId.Text.Trim() == "")
{
MessageBox.Show("请输入用户名", "输入提示", MessageBoxButtons.OK,MessageBoxIcon.Information);
txtLogInId.Focus();
return false;
}
else if (txtLogInPwd.Text.Trim() == "")
{
MessageBox.Show("请输入密码", "输入提示", MessageBoxButtons.OK,MessageBoxIcon.Information);
txtLogInPwd.Focus();
return false;
}
else if (cboLogInType.Text.Trim() == "")
{
MessageBox.Show("请选择登录类型", "输入提示", MessageBoxButtons.OK,MessageBoxIcon.Information);
cboLogInType.Focus();
return false;
}
else
{
return true;
}
}
// 验证用户输入的用户名和密码是否正确
// 验证的结果有两种情况:通过和不通过,返回值为布尔型
// 不通过的原因可能有多种,在方法的参数中的message字符串,用以标识不通过的情况
public bool ValidateUser(string loginType, string loginId, string loginPwd)
{
// 创建Connection 对象
string connString = "Data Source=.;Initial Catalog=MySchool;User ID=sa;pwd=han123";
SqlConnection connection = new SqlConnection(connString);
int num = 0; // 选员信息的数量
// 查询用的SQL 语句
string sql = "SELECT COUNT(*) FROM recordInfo where id='" + loginId + "' and pwd = '" + loginPwd + "' and type = '" + loginType + "'";
bool isExist = false;
try
{
connection.Open();// 打开数据库连接
// 创建Command 对象
SqlCommand command = new SqlCommand(sql, connection);
// 执行SQL 查询
num = (int)command.ExecuteScalar();
if (num > 0)
{
isExist = true;
}
else
{
MessageBox.Show("数据库中无此记录!", "提示信息", MessageBoxButtons.OK,MessageBoxIcon.Information);
}
}
catch (Exception ex)//也可根据ex值判断错误
{
// 操作出错
MessageBox.Show("连接数据库出错!");
}
finally
{
// 关闭数据库连接
connection.Close();
}
return isExist;
}
// 根据登录类型,显示相应的窗体
public void ShowUserForm()
{
MessageBox.Show("欢迎使用该系统:" + type + name);
}
private void btnCancel_Click(object sender, EventArgs e)
{
Application.Exit();
}
}
}
(7)保存并构建应用程序。执行应用程序,以验证其工作情况。运行效果如图所示:
登录界面图
=======================================================================
1.控件属性的学习积累
登陆界面输入密码textbox PasswordChar
下拉框combobox只能选择不能输入DropDownStyle->DropDownList
=========================================================================
2.对.Designer.cs的理解
designer.cs 是窗体设计器生成的代码文件,作用是对窗体上的控件做初始化工作(在函数InitializeComponent()中)
VS2003以前都把这部分代码放到窗体的cs文件中,但是这部分代码一般不用手工修改。
VS2005以后把它单独分离出来形成一个designer.cs文件与窗体对应,这样cs文件中剩下的代码都是与程序功能相关性较高的代码利于维护。