ADO.NET学习系列(四)---窗体版的登录小程序
2015-06-07 19:35
671 查看
1.需求分析:做一个登录的小程序,基于Winform的窗体小程序。基本要求:登录成功:弹框显示登录成功,登录失败就弹框显示失败。
扩展功能:登录次数超过3次,就”锁定“用户,提示登录错误次数过多,不能登录。用户点击之后,就退出程序;登录成功,就把错误字段清零。
这里我们在数据库表中,加一个错误字段,类型为int,初始值设置为0.
相信;这个小程序对于大家来说,是超级简单的。我这里也是来熟悉一下,把基础知识再巩固一下。
2.用到的技术:ADO.NET,存储过程。
3.项目实现:
首先我们新建一个窗体应用程序,然后把该有的控件,放上去,如图所示:
编码实现
实现这个功能的过程中,遇到了几个问题:
1.创建存储过程的时候,使用的参数是@userName。而根据用户名查询用户的信息的存储过程只用的参数是@name,这两个搞混了,应该分开来。。
2.创建一个封装查询的方法 public void ResetErrTimes(string sql, params SqlParameter[] parmeters)和 public void IncerErrTimes(string sql, params SqlParameter[] parmeters)的时候,写成了 public void ResetErrTimes(string sql, params string[] parmeters)导致后面调用这个方法的时候,报错。
3.循环添加参数的时候,写错了,我之前写成了:
foreach (var item in parmeters)
{
scmd.Parameters.Add(parmeters); //这是错误的。
}
4.存储过程的改名:EXEC sp_rename '旧名', '新名'
正确的应该是:
foreach (SqlParameter item in parmeters)
{
scmd.Parameters.Add(item);
}
程序执行的效果图:
总的来说,通过做这个例子,我收获很大。大家呢?
扩展功能:登录次数超过3次,就”锁定“用户,提示登录错误次数过多,不能登录。用户点击之后,就退出程序;登录成功,就把错误字段清零。
这里我们在数据库表中,加一个错误字段,类型为int,初始值设置为0.
相信;这个小程序对于大家来说,是超级简单的。我这里也是来熟悉一下,把基础知识再巩固一下。
2.用到的技术:ADO.NET,存储过程。
3.项目实现:
首先我们新建一个窗体应用程序,然后把该有的控件,放上去,如图所示:
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 窗体的登录程序 { public partial class Login : Form { public Login() { InitializeComponent(); } /// <summary> /// 增加错误次数 /// </summary> public void IncerErrTimes(string sql, params SqlParameter[] parmeters) { //1创建连接对象 SqlConnection scon = new SqlConnection(DBHelper.GetConnectString()); //2创建命令对象 SqlCommand scmd = new SqlCommand(); scmd.CommandText = sql; scmd.CommandType = CommandType.StoredProcedure; scmd.Connection = scon; //3打开连接 scon.Open(); //配置参数 foreach (SqlParameter item in parmeters) { scmd.Parameters.Add(item); } //4执行命令 //5.处理数据 scmd.ExecuteNonQuery(); //6关闭连接 scon.Close(); } /// <summary> /// 充置错误次数 /// </summary> public void ResetErrTimes(string sql, params SqlParameter[] parmeters) { //1创建连接对象 SqlConnection scon = new SqlConnection(DBHelper.GetConnectString()); //2创建命令对象 SqlCommand scmd = new SqlCommand(); scmd.CommandText = sql; scmd.CommandType = CommandType.StoredProcedure; scmd.Connection = scon; //3打开连接 scon.Open(); //配置参数 foreach (SqlParameter item in parmeters) { scmd.Parameters.Add(item); } //4执行命令 //5.处理数据 scmd.ExecuteNonQuery(); //6关闭连接 scon.Close(); } private void btnLogin_Click(object sender, EventArgs e) { //获取用户输入的用户名和密码 string usernName = txtLoginName.Text.Trim(); string password = txtPassword.Text.Trim(); //连接方式访问数据库 //1.创建连接对象(连接字符串) SqlConnection scon = new SqlConnection(DBHelper.GetConnectString()); //2创建命令对象 SqlCommand scmd = new SqlCommand(); scmd.CommandText = "GetUserInfoByName"; scmd.CommandType = CommandType.StoredProcedure; scmd.Connection = scon; //3打开连接 scon.Open(); //配置参数 SqlParameter parameter = new SqlParameter(); parameter.ParameterName = "@name"; parameter.DbType = DbType.String; parameter.Value = usernName; parameter.Direction = ParameterDirection.Input; scmd.Parameters.Add(parameter); //4执行命令 SqlDataReader reader = scmd.ExecuteReader(CommandBehavior.CloseConnection); //5.处理数据。 if (reader.Read()) { int errorTimes =(int)reader["T_ErrorTimes"]; if (errorTimes > 3) { MessageBox.Show("登录错误次数过多", "友情提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } if (password == reader.GetString(reader.GetOrdinal("T_PWD"))) { MessageBox.Show("登录成功", "友情提示", MessageBoxButtons.OK, MessageBoxIcon.Information); ResetErrTimes("Reset_errorTimes", new SqlParameter("@userName", usernName)); } else { MessageBox.Show("密码错误", "友情提示", MessageBoxButtons.OK, MessageBoxIcon.Error); IncerErrTimes("Incre_errorTimes", new SqlParameter("@userName", usernName)); } } else { MessageBox.Show("用户名不存在", "友情提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); } //6.关闭连接 reader.Close(); } } }
编码实现
实现这个功能的过程中,遇到了几个问题:
1.创建存储过程的时候,使用的参数是@userName。而根据用户名查询用户的信息的存储过程只用的参数是@name,这两个搞混了,应该分开来。。
2.创建一个封装查询的方法 public void ResetErrTimes(string sql, params SqlParameter[] parmeters)和 public void IncerErrTimes(string sql, params SqlParameter[] parmeters)的时候,写成了 public void ResetErrTimes(string sql, params string[] parmeters)导致后面调用这个方法的时候,报错。
3.循环添加参数的时候,写错了,我之前写成了:
foreach (var item in parmeters)
{
scmd.Parameters.Add(parmeters); //这是错误的。
}
4.存储过程的改名:EXEC sp_rename '旧名', '新名'
正确的应该是:
foreach (SqlParameter item in parmeters)
{
scmd.Parameters.Add(item);
}
程序执行的效果图:
总的来说,通过做这个例子,我收获很大。大家呢?
相关文章推荐
- 微信又出新玩法,继小视频后公众号文章支持添加音乐
- 使用微信支付后调回到自己客户端
- 分享到微信、微博、QQ空间、QQ微博
- 网页版微信和微信公共号扫码登陆原理分析
- 微信行业解决方案
- 微信授权网页登陆,oauth
- 关注PHPthinking官网微信公众号——红包来袭
- 微信公众号文章也可以添加音乐 不用因无法添加背景音乐代码而烦恼了
- perl小程序(一)
- 微信js sdk invalid signature签名错误 问题解决。
- html css 仿微信底部自定义菜单
- 用chrome模拟微信浏览器访问需要OAuth2.0网页授权的页面
- 微信图像接口
- Android百度地图(地位和POI附近搜索)-仿微信、QQ地理位置的分享
- 银行推出微信开户远程叫号和智能填单服务
- 马化腾:办公用QQ休闲用微信[Dream Catchers论坛]
- 微信开发小功能
- 仿微信主界面导航栏图标字体颜色的变化
- C#调用百度翻译接口小程序
- 微信JS-SDK如何使用