这里使用了SqlHelper,简化程序

  自己写一个SqlHelper,把数据库的连接等都写到里面去。

  首先把连接字符串添加到配置文件里去,右键解决方案-->添加新建项-->选择应用程序配置文件

  添加一个下字段,红色部分为新添加的代码,name字段一定要写,下面的使用就是靠这个关键字

 <?xml version="1.0"?>
<configuration>
<connectionStrings>
4 <add name="dbconn"
5 connectionString="Data Source=.;Initial Catalog=Test1;User ID=sa;Password=123456"/>
6
7 </connectionStrings>

</configuration>

  在sqlHelper类中添加一个变量,并定义函数

  private static string conStr = ConfigurationManager.ConnectionStrings["dbConn"].ConnectionString;

   public static DataTable ExecuteDataTable(string sql, params SqlParameter[] parameters)
{
using (SqlConnection conn = new SqlConnection(conStr))
{
conn.Open();
using (SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText = sql;
cmd.Parameters.AddRange(parameters);
DataSet dataset = new DataSet();
SqlDataAdapter apdater = new SqlDataAdapter(cmd);
apdater.Fill(dataset);
return dataset.Tables[];
}
}
}

  这些操作只是把代码给提出来,不用每次使用都去写下所有代码。

  然后就是函数响应了,非常简洁

   private void btn_Login_Click(object sender, RoutedEventArgs e)
{
if (tb_UserID.Text.Length <= )
{
MessageBox.Show("请输入用户名");
return;
}
if (pwdPassword.Password.Length <= )
{
MessageBox.Show("请输入密码");
return;
} DataTable table = SqlHelper.ExecuteDataTable("select * from USERINFO where UserID=@user", new SqlParameter("@user", tb_UserID.Text)); if (table.Rows.Count <= )
{
MessageBox.Show("用户不存在");
return;
}
//要对不可能发生的情况进行做处理,断言 Assert
else if (table.Rows.Count > )
{
throw new Exception("用户名重复!");
} DataRow row = table.Rows[];
string dbPassword = row["Password"].ToString();
long id = (long)row["ID"];//获取ID,这是数据库新增加的一个标识字段,没有实际意义,但可以用来数据判断
int errorTimes = (int)row["ErrorTimes"];//获取错误次数
if (errorTimes >= )
{
MessageBox.Show("输入次数过多,用户已锁定");
return;
}
if (dbPassword != pwdPassword.Password)
{
//把登录用户的错误次数加一
SqlHelper.ExecuteNonQuery("update USERINFO set ErrorTimes=ErrorTimes+1 where ID=@id"
,new SqlParameter("@id",id)); MessageBox.Show("密码错误!");
}
else
{
MessageBox.Show("登录成功!");
}
}

  感觉这样一写,比上个程序简单很多,bug也要少很多。

最新文章

  1. GO语言总结(4)——映射(Map)
  2. 购物车相关 js
  3. Dojo特效(翻译)
  4. spring+struts2的jar
  5. UICollectionView(集合视图)以及自定义集合视图
  6. 开源中国(oschina)的Git托管
  7. linux 中如何修改时间 date
  8. 20135326、20135303-linux实验三实验报告
  9. 由外边距合并到BFC
  10. NeHe OpenGL教程 第十二课:显示列表
  11. set gameobject Icons by Script
  12. android 在新建短信时,加入名称为&quot;,&quot;(英文逗号)的联系人时,应用崩溃的修改
  13. TI C66x DSP 系统events及其应用 - 5.8(ISTP)
  14. Spring MVC使用样例
  15. 【Python全栈-HTML】HTML引入文件的绝对路径、相对路径、根目录
  16. jQuery中删除方法empty(),remove()和detach()的区别
  17. SAP MM PO 中的Delivery Date并非保存在EKPO表里
  18. PLSQL 汉化
  19. nodejs设置NODE_ENV环境变量(2)
  20. zabbix web 登录成功后提示(红色提示):zabbix server is not running:the information displayed may not be current

热门文章

  1. c++编写递归函数char *itostr (int n,char *string),该函数将整数n转换为十进制表示的字符串。
  2. 详细讲解:yii 添加外置参数 高级版本
  3. pta 编程题16 Saving James Bond - Easy Version
  4. 同余问题(一)——扩展欧几里得exgcd
  5. Problem D: 双向冒泡排序
  6. javaweb基础(26)_jsp标签库开发二
  7. CUDA &amp;&amp; GPU中dim3介绍
  8. github不能加载css、js解决办法
  9. 使TextBox的内容换行
  10. 高性能可扩展MySQL数据库设计及架构优化 电商项目(慕课)第3章 MySQL执行计划(explain)分析