亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

ADO.NET學習系列(四)---窗體版的登錄小程序

2019-11-14 15:59:00
字體:
來源:轉載
供稿:網友

1.需求分析:做一個登錄的小程序,基于Winform的窗體小程序?;疽螅旱卿洺晒Γ簭椏蝻@示登錄成功,登錄失敗就彈框顯示失敗。

擴展功能:登錄次數超過3次,就”鎖定“用戶,提示登錄錯誤次數過多,不能登錄。用戶點擊之后,就退出程序;登錄成功,就把錯誤字段清零。

這里我們在數據庫表中,加一個錯誤字段,類型為int,初始值設置為0.

相信;這個小程序對于大家來說,是超級簡單的。我這里也是來熟悉一下,把基礎知識再鞏固一下。

2.用到的技術:ADO.NET,存儲過程。

3.項目實現:

  • 首先我們新建一個窗體應用程序,然后把該有的控件,放上去,如圖所示:

   

 

 

  • 創建數據庫和存儲過程:
  •  1 USE [DB_USERS] 2 GO 3  4 /****** Object:  Table [dbo].[T_USERS]    Script Date: 06/07/2015 17:48:33 ******/ 5 SET ANSI_NULLS ON 6 GO 7  8 SET QUOTED_IDENTIFIER ON 9 GO10 11 CREATE TABLE [dbo].[T_USERS](12     [T_ID] [INT] IDENTITY(1,1) NOT NULL,13     [T_NAME] [NVARCHAR](10) NOT NULL,14     [T_PWD] [NVARCHAR](10) NOT NULL,15     [T_AGE] [INT] NOT NULL,16     [T_ErrorTimes] [INT] NOT NULL,17 PRIMARY KEY CLUSTERED 18 (19     [T_ID] ASC20 )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]21 ) ON [PRIMARY]22 23 GO
    數據庫腳本

*數據庫表是我之前建好的,現在就直接導成腳本算了?,F在來寫存儲過程

*根據用戶名來查詢信息(因為之前,我寫了根據用戶名來查詢用戶信息,但是現在我給之前寫的存儲過程改個名字)

我們可以使用:EXEC sp_rename '舊名', '新名',

這里我就不貼根據用戶名,來查詢用戶信息的存儲過程了,可以看我前面幾個系列的文章。

*用戶輸入錯誤,給錯誤字段自增1的存儲過程:

1  IF OBJECT_ID('Incre_errorTimes','P') IS NOT NULL2  DROP PROCEDURE Incre_errorTimes3  GO 4  CREATE PROCEDURE Incre_errorTimes5  @userName nvarchar(10)6  AS 7  UPDATE dbo.T_USERS SET T_ErrorTimes=T_ErrorTimes+1 WHERE T_NAME=@userName8  GO 9  

*用戶輸入正確,給錯誤字段的值設置為0

1  IF OBJECT_ID('Reset_errorTimes','P') IS NOT NULL2  DROP PROCEDURE Reset_errorTimes3  GO 4  CREATE PROCEDURE Reset_errorTimes5  @userName nvarchar(10)6  AS 7  UPDATE dbo.T_USERS SET T_ErrorTimes=0 WHERE T_NAME=@userName8  GO 9  

 

數據庫表,和存儲過程弄好之后,我們可以來寫程序了

這里的連接字符串,我放在配置文件中,具體怎么操作,就不再贅述了。

編碼實現:

 

  1 using System;  2 using System.Collections.Generic;  3 using System.ComponentModel;  4 using System.Data;  5 using System.Drawing;  6 using System.Linq;  7 using System.Text;  8 using System.Threading.Tasks;  9 using System.Windows.Forms; 10 using System.Data; 11 using System.Data.SqlClient; 12  13 namespace 窗體的登錄程序 14 { 15     public partial class Login : Form 16     { 17         public Login() 18         { 19             InitializeComponent(); 20         } 21         /// <summary> 22         /// 增加錯誤次數 23         /// </summary> 24         public void IncerErrTimes(string sql, params SqlParameter[] parmeters) 25         { 26             //1創建連接對象 27             SqlConnection scon = new SqlConnection(DBHelper.GetConnectString()); 28             //2創建命令對象 29             SqlCommand scmd = new SqlCommand(); 30             scmd.CommandText = sql; 31             scmd.CommandType = CommandType.StoredProcedure; 32             scmd.Connection = scon; 33             //3打開連接 34             scon.Open(); 35  36             //配置參數 37             foreach (SqlParameter item in parmeters) 38             { 39                 scmd.Parameters.Add(item); 40  41             } 42  43             //4執行命令 44             //5.處理數據 45            scmd.ExecuteNonQuery(); 46             47             //6關閉連接 48             scon.Close(); 49  50             51         } 52  53         /// <summary> 54         /// 充置錯誤次數 55         /// </summary> 56         public void ResetErrTimes(string sql, params SqlParameter[] parmeters) 57         { 58             //1創建連接對象 59             SqlConnection scon = new SqlConnection(DBHelper.GetConnectString()); 60             //2創建命令對象 61             SqlCommand scmd = new SqlCommand(); 62             scmd.CommandText = sql; 63             scmd.CommandType = CommandType.StoredProcedure; 64             scmd.Connection = scon; 65             //3打開連接 66             scon.Open(); 67  68             //配置參數 69             foreach (SqlParameter item in parmeters) 70             { 71                 scmd.Parameters.Add(item); 72  73             } 74             //4執行命令 75             //5.處理數據 76             scmd.ExecuteNonQuery(); 77  78             //6關閉連接 79             scon.Close(); 80  81         } 82  83         private void btnLogin_Click(object sender, EventArgs e) 84         { 85             //獲取用戶輸入的用戶名和密碼 86             string usernName = txtLoginName.Text.Trim(); 87             string passWord = txtPassword.Text.Trim(); 88  89             //連接方式訪問數據庫 90  91             //1.創建連接對象(連接字符串) 92             SqlConnection scon = new SqlConnection(DBHelper.GetConnectString()); 93  94             //2創建命令對象 95             SqlCommand scmd = new SqlCommand(); 96             scmd.CommandText = "GetUserInfoByName"; 97             scmd.CommandType = CommandType.StoredProcedure; 98             scmd.Connection = scon; 99 100             //3打開連接101             scon.Open();102 103             //配置參數104             SqlParameter parameter = new SqlParameter();105             parameter.ParameterName = "@name";106             parameter.DbType = DbType.String;107             parameter.Value = usernName;108             parameter.Direction = ParameterDirection.Input;109             scmd.Parameters.Add(parameter);110 111             //4執行命令112             SqlDataReader reader = scmd.ExecuteReader(CommandBehavior.CloseConnection);113 114            115 116             //5.處理數據。117             if (reader.Read())118             {119                 int errorTimes =(int)reader["T_ErrorTimes"];120                 if (errorTimes > 3)121                 {122                     MessageBox.Show("登錄錯誤次數過多", "友情提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);123                     return;124                 }125 126                 if (password == reader.GetString(reader.GetOrdinal("T_PWD")))127                 {128                     MessageBox.Show("登錄成功", "友情提示", MessageBoxButtons.OK, MessageBoxIcon.Information);129                     ResetErrTimes("Reset_errorTimes", new SqlParameter("@userName", usernName));130 131                 }132                 else133                 {134                     MessageBox.Show("密碼錯誤", "友情提示", MessageBoxButtons.OK, MessageBoxIcon.Error);135                     IncerErrTimes("Incre_errorTimes", new SqlParameter("@userName", usernName));136 137                 }138             }139             else140             {141                 MessageBox.Show("用戶名不存在", "友情提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);142             }143 144             //6.關閉連接145             reader.Close();146 147 148         }149     }150 }
編碼實現

實現這個功能的過程中,遇到了幾個問題:

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);

}

 程序執行的效果圖:

總的來說,通過做這個例子,我收獲很大。大家呢?


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
伊人久久精品视频| 国产日本欧美一区二区三区在线| 欧美高跟鞋交xxxxhd| 日本亚洲欧美成人| 97视频免费在线观看| 两个人的视频www国产精品| 国产视频久久久久久久| 亚洲韩国日本中文字幕| 97涩涩爰在线观看亚洲| 一本色道久久综合狠狠躁篇怎么玩| 欧美成人精品h版在线观看| 国产婷婷成人久久av免费高清| 国产ts人妖一区二区三区| 黑人巨大精品欧美一区二区免费| 97在线精品国自产拍中文| 成人免费观看49www在线观看| 中文字幕自拍vr一区二区三区| 精品福利在线看| 国产黑人绿帽在线第一区| 91精品国产91久久久久久不卡| 欧美电影免费在线观看| 国产精品久久久久久av福利| 国产精品精品一区二区三区午夜版| 精品中文字幕久久久久久| 日韩在线播放视频| 国内精品模特av私拍在线观看| 国产成人免费91av在线| 亚洲欧美国内爽妇网| 久久久www成人免费精品张筱雨| 日韩中文字幕不卡视频| 久色乳综合思思在线视频| 69久久夜色精品国产7777| 色综合久久88| 精品亚洲永久免费精品| 97精品国产91久久久久久| 欧美激情va永久在线播放| 欧美大肥婆大肥bbbbb| 欧美电影免费观看高清完整| 91国产视频在线| 国内精品400部情侣激情| 亚洲天堂av电影| 国产99久久精品一区二区 夜夜躁日日躁| 午夜精品一区二区三区在线播放| 久久精品国产电影| 亚洲伦理中文字幕| 欧美激情一区二区久久久| 91色视频在线观看| 欧美精品久久久久久久| 中文字幕av日韩| 一区二区三区四区在线观看视频| 91精品啪aⅴ在线观看国产| 色婷婷综合久久久久中文字幕1| 丝袜情趣国产精品| 日本不卡免费高清视频| 欧美夜福利tv在线| 日韩av片永久免费网站| 国产在线精品成人一区二区三区| 欧洲亚洲女同hd| 国产美女高潮久久白浆| 国产精品69久久久久| 欧美午夜www高清视频| 亚洲欧美中文字幕在线一区| 在线成人激情视频| 中文字幕日韩欧美精品在线观看| 中文字幕日韩在线播放| 欧美性猛交99久久久久99按摩| 91精品久久久久久久久久入口| 亚洲网站视频福利| 亚洲福利视频网| 欧美一级片一区| 久久国产精品电影| 最近2019中文免费高清视频观看www99| 国产欧美一区二区三区在线| 亚洲天堂av高清| 国产精品久久久久久久久| 欧美多人爱爱视频网站| 欧美精品xxx| 亚洲成人免费在线视频| 久久影视电视剧免费网站清宫辞电视| 8050国产精品久久久久久| 国产一区二区日韩| 日韩av综合网| 日韩极品精品视频免费观看| 欧美性色视频在线| 亚洲精品成人久久| 国产精品一区二区在线| 久久综合久久美利坚合众国| 欧美亚洲伦理www| 成人黄色影片在线| 成人欧美一区二区三区在线| 亚洲欧美综合精品久久成人| 亚洲男人天堂网| 性欧美在线看片a免费观看| 欧美极品美女电影一区| 91精品国产高清自在线看超| 亚洲国产精品999| 精品国产欧美一区二区三区成人| 日韩精品福利在线| 91超碰中文字幕久久精品| 精品亚洲一区二区三区| 欧美小视频在线| 亚洲综合日韩在线| 久久久精品久久| 国产亚洲aⅴaaaaaa毛片| 欧美一级电影免费在线观看| 久久天天躁狠狠躁夜夜躁| 毛片精品免费在线观看| 美女扒开尿口让男人操亚洲视频网站| 久久99青青精品免费观看| 国产精品久久久久久久9999| 亚洲激情视频网| 久久亚洲精品中文字幕冲田杏梨| 国产精品成av人在线视午夜片| 亲爱的老师9免费观看全集电视剧| 国产精品香蕉在线观看| 欧美日韩国产123| 欧美精品在线第一页| 国产一区二区三区免费视频| 黄色成人在线播放| y97精品国产97久久久久久| 久久人体大胆视频| 麻豆成人在线看| 免费不卡欧美自拍视频| 国产福利精品在线| 在线看片第一页欧美| 国产精品高潮视频| 精品综合久久久久久97| 国产日韩在线精品av| 亚洲小视频在线观看| 亚洲天堂第一页| 久久久久久久久久av| 国产不卡av在线免费观看| 欧美激情影音先锋| 欧美激情日韩图片| 精品偷拍一区二区三区在线看| 欧美性xxxxx极品| 国产欧美精品在线播放| 日本国产一区二区三区| 欧美成aaa人片在线观看蜜臀| 永久免费看mv网站入口亚洲| 亚洲视频综合网| 久久福利视频导航| 57pao成人国产永久免费| 国产精品国产亚洲伊人久久| 91久久久久久国产精品| 色偷偷av亚洲男人的天堂| 国产精品一区久久久| 中文字幕一区电影| 日本中文字幕不卡免费| 亚洲成人av片在线观看| 岛国av在线不卡| 国产一区二区三区网站| 精品国产91久久久久久| 国产精品jizz在线观看麻豆| 色综久久综合桃花网| 欧美激情精品久久久久| 欧美极品少妇与黑人| 欧美日韩性生活视频| 久久精品国产亚洲| 91性高湖久久久久久久久_久久99| 深夜精品寂寞黄网站在线观看| 国产aaa精品| 国产综合色香蕉精品| 国产91精品不卡视频|