温习WinForm程序与数据库连接操作

来源:互联网 发布:自动发微博软件 编辑:程序博客网 时间:2024/06/05 14:14

        新的一学期,新的开始,2012年为了迎接百日之后的实习,开始紧跟着老师复习,加上自己的继续坚持学习,希望时间一到可以找到一个比较好的工作,与实现自己的梦想更进一步。

       今天复习了之前学过的WinForm窗体程序,实现一个简单的登录功能,通过作业也实现了一些以前没做过的功能,限制登录次数,登录次数过多后稍候才能再次登录。

       通过今天的复习感觉到,知识学的快,忘记的速度也是不容小视的,要保持自己的记忆,只有坚持“学而时习之”,然而每个人的一生也都应该在学习中度过,这样不会觉得时间被浪费,被荒度,充分利用每时每刻,温习旧的知识,更新新的知识,而且在IT这一特殊的行业中,技术更新的速度之快,经常会出乎人们的意料,更突出了更新自己的技术的重要性,保证自己不OUT掉,才会提升自己的价值,保证自己在IT大军中处于靠前的位置。

       今天的温习也拾起了过去熟悉而现在却有些许陌生的代码,下面也贴出来自己今天的成果以备后用

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.Configuration;

namespace WinFormWork
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        public int i = 0;
        private void button1_Click(object sender, EventArgs e)
        {
            string str = ConfigurationManager.ConnectionStrings["strcon"].ConnectionString;
            SqlConnection con = new SqlConnection(str);
            SqlCommand com = new SqlCommand(); 
            com.Connection = con;
            com.CommandText = "select * from T_Users where UserName=@username and Password=@password";
            com.Parameters.AddWithValue("@username", txtName.Text);
            com.Parameters.AddWithValue("@password", txtPassword.Text);
            SqlDataAdapter adapter = new SqlDataAdapter(com);
            DataTable dt = new DataTable();
            adapter.Fill(dt);

            if (dt.Rows.Count == 1)
            {
                if (i > 2)
                { MessageBox.Show("尝试次数过多,请稍候再试"); }
                else
                {
                    MessageBox.Show("登录成功!");
                }
            }
            else if (dt.Rows.Count <= 0)
            {
                if (i == 0)
                {
                    MessageBox.Show("输入用户名或密码不正确,请重新输入,还有2次机会!");
                    i++;
                    return;
                }
                else if (i == 1)
                {
                    MessageBox.Show("输入用户名或密码不正确,请重新输入,还有1次机会!");
                    i++;
                    return;
                }
                else if (i == 2)
                {
                    MessageBox.Show("尝试次数过多,请稍候再试!");
                    com.CommandText = "update T_Users set ErrorTime=@error where UserName=@name";
                    com.Parameters.AddWithValue("@error", DateTime.Now);
                    com.Parameters.AddWithValue("@name", txtName.Text);
                    con.Open();
                    int m = com.ExecuteNonQuery();
                    i++;

                }
                #region 等待时间
                else
                {
                    com.CommandText = "select Errortime from T_Users where username=@user";
                    com.Parameters.AddWithValue("@user", txtName.Text);
                    con.Open();
                    string time = Convert.ToString(com.ExecuteScalar());
                    DateTime datetime1, datetime2 = DateTime.Now;
                    datetime1 = Convert.ToDateTime(time);
                    int d3 = 0;

                    TimeSpan ts1 = new TimeSpan(datetime1.Ticks);
                    TimeSpan ts2 = new TimeSpan(datetime2.Ticks);

                    TimeSpan ts = ts1.Subtract(ts2).Duration();

                    d3 = ts.Minutes;
                    if (d3 < 2)
                    {
                        MessageBox.Show("尝试次数过多,请稍候再试!");
                    }
                    else
                    {
                        i = 0;
                        return;
                    }
                }
                #endregion

            }
            
            com.Dispose();
            con.Dispose();
        }
    }
}
一种表示时间段的实例:

TimeSpan是用来表示一个时间段的实例,两个时间的差可以构成一个TimeSpan实例,现在就来简单介绍一下几点重要的用法:

a 先来介绍几个方法

TimeSpan.Minutes(其他时间比如天数,小时数,秒数都一样的情况下得到的分钟数的差),其他的Hours,Second一样

DateTime.Tick :是一个计时周期,表示一百纳秒,即一千万分之一秒,那么 Ticks 在这里表示总共相差多少个时间周期,即:9 * 24 *                    3600 * 10000000 + 23 * 3600 * 10000000 + 59 * 60 * 10000000 + 59 * 10000000 = 8639990000000。3600 是一小时                    的秒数

TimeSpan.TotalDays:两个时间段相差的日数,其他的TotalHours,TotalMinutes,TotalSeconds 一样

 

b 两个时间的差

string time1 = "2010-5-26 8:10:00";

string time2 = "2010-5-26 18:20:00";

DateTime t1 = Convert.ToDateTime(time1);

DateTime t2 = Convert.ToDateTime(time2);

 

TimeSpan ts1=t2-t1;

string tsMin=ts1.Minutes.ToString();

 

 

TimeSpan ts11=new TimeSpan(t1.Tick);

TimeSpan ts22=new TimeSpan(t2.Tick);

 

string diff=ts22.Subtract(ts11).TotalMinutes.ToString();

Subtract:表示两个时间段的差

diff:就表示两个时间相差的分钟数,上面的例子就是610分钟。

 

 得到一个 TimeSpan 实例,TimeSpan 有一些属性:Days、TotalDays、Hours、TotalHours、Minutes、TotalMinutes、Seconds、TotalSeconds、Ticks,注意没有 TotalTicks。

这些属性名称开始理解有些困难,但阅读本文后,相应您一定茅塞顿开。

举例说明

  • 时间 1 是 2010-1-2 8:43:35;
  • 时间 2 是 2010-1-12 8:43:34。

用时间 2 减时间 1,得到一个 TimeSpan 实例。

那么时间 2 比时间 1 多 9 天 23 小时 59 分 59 秒

那么,Days 就是 9,Hours 就是 23,Minutes 就是 59,Seconds 就是 59。


原创粉丝点击