WinForm(C#)第一篇:登入頁面實現+SQL Server資料庫連線方式
前言
最近見習,要完成的一個作業。主要是WinForm(C#)開發,本想參考網上的Demo,但一直沒找到合適入門的,因此打算自己記錄一下整個開發過程,給予隊友和後面學習的人一些方便。
當然,我也是第一次學習WinForm,技術不夠成熟,程式碼也可能不夠優化,希望大神多指教。
開發環境
本系列都是一下開發環境,後面的文章不在重複。
系統:Windows 10 家庭版
IDE:Visual studio 2015 Enterprise
資料庫:SQL SERVER 2012
GitHub Desktop:3.3.4.0
登入頁面前臺頁面
登入頁面後臺驗證
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;
namespace MES_SimpleDemo
{
public partial class Login : Form
{
public Login()
{
InitializeComponent();
}
/**登入驗證*/
private void button1_Click(object sender, EventArgs e)
{
//獲取文字框中的值
string username = this.textBox1.Text;
string password = this.textBox2.Text;
if(username.Equals("" ) || password.Equals(""))//使用者名稱或密碼為空
{
MessageBox.Show("使用者名稱或密碼不能為空");
}
else//使用者名稱或密碼不為空
{
//到資料庫中驗證
string selectSql = "select * from tb_user where username='"+username+"' and password='"+password+"'";
SqlHelp sqlHelper = new SqlHelp();
int count = sqlHelper.SqlServerRecordCount(selectSql);//返回符合的結果數量
if (count > 0)//如果資訊>0則說明匹配成功
{
MessageBox.Show("資訊驗證成功");
//將當前登入日誌資訊寫入資料庫(待開發...)
//跳轉到主頁面
Main view = new Main();//建立一個新頁面
view.Show();//顯示新頁面
this.Hide();//隱藏當前頁面
}
else
{
MessageBox.Show("使用者名稱或密碼錯誤");
}
}
}
/**輸入框重置*/
private void button2_Click(object sender, EventArgs e)
{
this.textBox1.Text = "";
this.textBox2.Text = "";
}
}
}
成功頁面
資料庫連線核心程式碼
using System;
using System.Data;
using System.Configuration;
using System.Text.RegularExpressions;
using System.Data.SqlClient;
using System.IO;
using System.Net.Mail;
using System.Text;
/// <summary>
///主要包括sqlHelp資料庫訪問助手類 和常用的一些函式定義
///</summary>
///SqlHelp資料庫訪問助手
///1.public static void OpenConn() //開啟資料庫連線
///2.public static void CloseConn() //關閉資料庫連線
///3.public static SqlDataReader getDataReaderValue(string sql) //讀取資料
///4.public DataSet GetDataSetValue(string sql, string tableName) //返回DataSet
///5.public DataView GetDataViewValue(string sql) //返回DataView
///6.public DataTable GetDataTableValue(string sql) //返回DataTable
///7.public void ExecuteNonQuery(string sql) //執行一個SQL操作:新增、刪除、更新操作
///8.public int ExecuteNonQueryCount(string sql) //執行一個SQL操作:新增、刪除、更新操作,返回受影響的行
///9.public static object ExecuteScalar(string sql) //執行一條返回第一條記錄第一列的SqlCommand命令
///10.public int SqlServerRecordCount(string sql) //返回記錄數
///常用函式
///1.public static bool IsNumber(string a) //判斷是否為數字
///2.public static string GetSafeValue(string value) //過濾非法字元
namespace MES_SimpleDemo
{
class SqlHelp
{
///私有屬性:資料庫連線字串
///Data Source=(Local) 伺服器地址
///Initial Catalog=SimpleMESDB 資料庫名稱
///User ID=sa 資料庫使用者名稱
///Password=admin123456 資料庫密碼
private const string connectionString = "Data Source=(Local);Pooling=False;Max Pool Size = 1024;Initial Catalog=SimpleMESDB;Persist Security Info=True;User ID=sa;Password=admin123456";
/// <summary>
/// sqlHelp 的摘要說明:資料庫訪問助手類
/// sqlHelper是從DAAB中提出的一個類,在這裡進行了簡化,DAAB是微軟Enterprise Library的一部分,該庫包含了大量大型應用程式
/// 開發需要使用的庫類。
/// </summary>
public SqlHelp()
{
//無參建構函式
}
public static SqlConnection conn;
//開啟資料庫連線
public static void OpenConn()
{
string SqlCon = connectionString;//資料庫連線字串
conn = new SqlConnection(SqlCon);
if (conn.State.ToString().ToLower() == "open")
{
}
else
{
conn.Open();
}
}
//關閉資料庫連線
public static void CloseConn()
{
if (conn.State.ToString().ToLower() == "open")
{
//連線開啟時
conn.Close();
conn.Dispose();
}
}
// 讀取資料
public static SqlDataReader GetDataReaderValue(string sql)
{
OpenConn();
SqlCommand cmd = new SqlCommand(sql, conn);
SqlDataReader dr = cmd.ExecuteReader();
CloseConn();
return dr;
}
// 返回DataSet
public DataSet GetDataSetValue(string sql, string tableName)
{
OpenConn();
SqlDataAdapter da;
DataSet ds = new DataSet();
da = new SqlDataAdapter(sql, conn);
da.Fill(ds, tableName);
CloseConn();
return ds;
}
// 返回DataView
public DataView GetDataViewValue(string sql)
{
OpenConn();
SqlDataAdapter da;
DataSet ds = new DataSet();
da = new SqlDataAdapter(sql, conn);
da.Fill(ds, "temp");
CloseConn();
return ds.Tables[0].DefaultView;
}
// 返回DataTable
public DataTable GetDataTableValue(string sql)
{
OpenConn();
DataTable dt = new DataTable();
SqlDataAdapter da = new SqlDataAdapter(sql, conn);
da.Fill(dt);
CloseConn();
return dt;
}
// 執行一個SQL操作:新增、刪除、更新操作
public void ExecuteNonQuery(string sql)
{
OpenConn();
SqlCommand cmd;
cmd = new SqlCommand(sql, conn);
cmd.ExecuteNonQuery();
cmd.Dispose();
CloseConn();
}
// 執行一個SQL操作:新增、刪除、更新操作,返回受影響的行
public int ExecuteNonQueryCount(string sql)
{
OpenConn();
SqlCommand cmd;
cmd = new SqlCommand(sql, conn);
int value = cmd.ExecuteNonQuery();
return value;
}
//執行一條返回第一條記錄第一列的SqlCommand命令
public object ExecuteScalar(string sql)
{
OpenConn();
SqlCommand cmd;
cmd = new SqlCommand(sql, conn);
object value = cmd.ExecuteScalar();
return value;
}
// 返回記錄數
public int SqlServerRecordCount(string sql)
{
OpenConn();
SqlCommand cmd = new SqlCommand();
cmd.CommandText = sql;
cmd.Connection = conn;
SqlDataReader dr;
dr = cmd.ExecuteReader();
int RecordCount = 0;
while (dr.Read())
{
RecordCount = RecordCount + 1;
}
CloseConn();
return RecordCount;
}
///<summary>
///一些常用的函式
///</summary>
//判斷是否為數字
public static bool IsNumber(string a)
{
if (string.IsNullOrEmpty(a))
return false;
foreach (char c in a)
{
if (!char.IsDigit(c))
return false;
}
return true;
}
// 過濾非法字元
public static string GetSafeValue(string value)
{
if (string.IsNullOrEmpty(value))
return string.Empty;
value = Regex.Replace(value, @";", string.Empty);
value = Regex.Replace(value, @"'", string.Empty);
value = Regex.Replace(value, @"&", string.Empty);
value = Regex.Replace(value, @"%20", string.Empty);
value = Regex.Replace(value, @"--", string.Empty);
value = Regex.Replace(value, @"==", string.Empty);
value = Regex.Replace(value, @"<", string.Empty);
value = Regex.Replace(value, @">", string.Empty);
value = Regex.Replace(value, @"%", string.Empty);
return value;
}
}
}
資料庫表結構及記錄
登入測試
成功
失敗
今天就先簡單的登入頁面,其實連上了資料庫,之後的就跟Web開發一樣的思想,後面將會更新更多功能。
相關推薦
WinForm(C#)第一篇:登入頁面實現+SQL Server資料庫連線方式
前言 最近見習,要完成的一個作業。主要是WinForm(C#)開發,本想參考網上的Demo,但一直沒找到合適入門的,因此打算自己記錄一下整個開發過程,給予隊友和後面學習的人一些方便。 當然,我也是第一次學習WinForm,技術不夠成熟,程式碼也可能不夠
藍橋杯第八屆C/C++ A組省賽(2017)第一題:迷宮
標題:迷宮X星球的一處迷宮遊樂場建在某個小山坡上。它是由10x10相互連通的小房間組成的。房間的地板上寫著一個很大的字母。我們假設玩家是面朝上坡的方向站立,則:L表示走到左邊的房間,R表示走到右邊的房間,U表示走到上坡方向的房間,D表示走到下坡方向的房間。X星球的居民有點懶,
理解C語言——從小菜到大神的晉級之路(15)——完結篇:C程式設計風格
本期視訊連結:點選這裡 有人說過:“程式原始碼其實是跟人閱讀的,只是恰好機器可以編譯而已”。程式設計初學者常常會有這樣一個觀念,就是我的程式只要編譯通過了,執行沒有問題那就萬事大吉了。至於程式碼的編寫規不規範,完全就是無關緊要的小事情。如果是處於學習階段,比如
OpenJudge百煉習題解答(C++)--題4074:積水量
tom size alt popu function 滲透 urn dsm img 題: 總時間限制: 1000ms 內存限制:65536kB 描寫敘述 凹凸不平的地面每當下雨的時候總會積水。如果地面是一維的。每一塊寬度都為1,高度是非負整數。
OpenJudge百煉習題解答(C++)--題4010:2011
輸入 ati and splay blue margin display 推薦 bstr 題: 總時間限制: 1000ms 內存限制: 65536kB 描寫敘述已知長度最大為200位的正整數n。請求出2011^n的後四位。 輸入第一行為一個正整
(記錄)python篇:六_ 函數2
python、遞歸函數#遞歸函數#函數內部,一個函數可以調用自身本身,這個函數就是遞歸函數。def num(x): #第一步 return num_a(n,1) #第二部 def num_a(a,b): #與第二部對應,如果此時的num_a與上一步定義的函數不對應,則代碼報錯。 if a==
Oracle知識梳理(一)理論篇:基本概念和術語整理
http 知識梳理 屬性集 操作 url 本質 開發 表格 weight 理論篇:基本概念和術語整理 一、關系數據庫 關系數據庫是目前應用最為廣泛的數據庫系統,它采用關系數據模型作為數據的組織方式,關系數據模型由關系的數據結構,關系的操作集合和關系的完整
領略“軟體工程”之美(二) 就業篇:
在開篇,借用一個6個月從小白到程式設計師的前輩的一句話描述程式設計的難易程度:程式設計雖然除了勤奮沒什麼訣竅,但也沒你想的那麼難。(6個月的時間,一週6天,每天花費至少10小時去程式設計。) 在這裡分享一下他的部分學習感悟: 1.閱讀教材。 2.加入當地的程式語言小組。 3.大量撰寫程式
領略“軟體工程”之美(一) 學習篇:
讀大學之前,我對“軟體工程”沒有一點概念,只是在填報志願的時候才瞭解到,學習好這個專業,需要紮實的數學和英語知識,就果斷地選擇了挑戰一下。 軟體工程是一門研究工程化方法構建和維護有效的、實用的和高質量的軟體的學科。它涉
數字影象處理的筆記(一)第一部分:概念和應用領域
影象處理的部分先做一個大概的記錄,後續深入學習後展開。內容圍繞影象的分割和增強展開。 只是相關技術的某些應用,也可能不盡準確,為了記錄和學習。 第一部分:概念和應用領域 第二部分:相關的程式碼實現 ----------------------------針對畫素本身的操作,非
《好好學習》閱讀筆記(二)第一章:什麼是臨界知識
第一章 [----什麼是[臨界知識]] 目錄 自序 學習的三個目標: 1.解釋問題[----看清問題本質] 2.解決問題[----根據問題關鍵提出解決方案,最好有備用方案] 3.預測問題[----找到基本規律,預測未來走向]
c++入門第一篇:hello,world!
記錄每日學習程序,回顧複習便於查詢 c風格的實現 #include<stdio.h> int main() { printf("hello,world!\n"); return 0; } c++風格的實現 #inclu
全國綠色計算大賽 預賽第二階段(C++)第一關
第一關: 挑戰任務 “綠盟杯”比賽過後,賽事承辦方的各位工作人員們就開始分頭統計各個參賽隊伍和同學的成績了。賽事規模很大,有10000個隊伍參加。經過工作人員認真負責的統計,本來已經統計好了這一萬個隊伍的分數和排名,並按照排名從高到低依次進行了編號(從1到10000)但是
開源物聯網框架ServerSuperIO 3.0正式釋出(C#),跨平臺:Win&Win10 Iot&Ubuntu&Ubuntu Mate,一套裝置驅動跨平臺掛載,附:開發套件和教程。
3.0版本主要更新內容: 1.增加跨平臺能力:Win&Win10 Iot&Ubuntu&Ubuntu Mate 2.統一裝置驅動介面:可以一套裝置驅動,跨平臺掛載執行,降低人力成本,提高開發效率。 3.增加二次開發套件:支援控制檯和UI介面兩種方式。 4.增加配置工具:
基於Arduino Due的FreeRTOS程式設計(AtmelSAM3X8E)--第一篇
引言:本文介紹了FreeRTOS實時OS的基本功能,以及在SAM微控制器上如何配置和使用FreeRTOS的基本功能。本文涵蓋了一下幾大塊內容: l 什麼是Real-Time的應用以及什麼是實時作業系統 l 如何建立並配置一個FreeRTOS的專案 l 如何使用Free
OpenJudge百鍊習題解答(C++)--題4085:陣列去重排序
題: 總時間限制: 1000ms 記憶體限制: 1000kB 描述 小吉是銀行的會計師,在處理銀行帳目的時候,遇到了一些問題。有一系列整數,其中含有重複的整數,需要去掉重複後,排序輸出,你能幫助小
OpenJudge百鍊習題解答(C++ )--題4112:情報破譯-Cryptanalysis
題: 總時間限制:1000ms 記憶體限制:65536kB描述 A國和B國正在進行一場戰爭。A國通過間諜知道B國的情報加密規則為: 1. 僅對字母加密,其他符號保留(如空格,逗號等)
OpenJudge百鍊習題解答(C++)--題2690:首字母大寫
題: 總時間限制: 1000ms 記憶體限制: 65536kB 描述對一個字串中的所有單詞,如果單詞的首字母不是大寫字母,則把單詞的首字母變成大寫字母。在字串中,單詞之間通過空白符分隔,空白符包括:
OpenJudge百鍊習題解答(C++)--題4072:判斷多個點是否在同一直線
題: 總時間限制: 1000ms 記憶體限制: 65536kB 描述 有N(1<=n<=100)< span="">個互不重合的點,並給出它們的座標(xi,yi),問這些點
OpenJudge百鍊習題解答(C++)--題2704:競賽評分
題: 總時間限制: 1000ms 記憶體限制: 65536kB 描述現舉行一次小競賽,參賽的3支隊伍,編號為1,2,3.每支佇列輪流回答問題,如果回答正確,加10分;回答錯誤,扣10分;放棄回答不得