首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# WinForm 登入表單設計完整教學:從資料庫驗證到多視窗傳值

     編輯:關於C語言

前言

在開發 Windows Forms 應用程式時,登入視窗是幾乎每個專案都會遇到的基礎功能。本文將分享一個完整的登入表單實作範例,涵蓋資料庫連線、使用者驗證、錯誤處理,以及父子視窗之間的資料傳遞機制。程式碼採用 C# 撰寫,適合初學者參考與延伸。

資料庫結構設計

範例使用名為 users 的資料表,包含三個欄位:

  • ID:主鍵,自動遞增
  • UserName:使用者帳號
  • UserPasswd:使用者密碼

預設資料如下:

IDUserNameUserPasswd
1adminadmin
2useruser
3guestguest

登入邏輯流程

驗證流程分為三個步驟:

  1. 檢查使用者名稱是否為空
  2. 透過預存程序 IsUser 確認帳號是否存在
  3. 透過預存程序 Login 取得該帳號的密碼並比對

Form1:登入表單實作

介面佈局

表單包含兩個 Label(用戶名、密碼)、兩個 TextBox(輸入框,密碼欄設定 PasswordChar = '*')、兩個 Button(OK、Cancel)。表單屬性設定為 FixedDialog、不可最大化/最小化、不顯示在工作列。

核心程式碼

private void btnOK_Click(object sender, EventArgs e)
{
    if (string.IsNullOrEmpty(txtUser.Text))
    {
        MessageBox.Show("用戶名不能為空!", "錯誤");
        return;
    }
    if (string.IsNullOrEmpty(txtPasswd.Text))
    {
        MessageBox.Show("密碼不能為空!", "錯誤");
        return;
    }

    if (IsUser(txtUser.Text))
    {
        string dbPassword = LoginUser(txtUser.Text);
        if (txtPasswd.Text == dbPassword)
        {
            this.DialogResult = DialogResult.OK;
            Form2 owner = (Form2)this.Owner;
            owner.getUserName = this.txtUser.Text;
        }
        else
        {
            MessageBox.Show("用戶名或密碼錯誤!");
        }
    }
    else
    {
        MessageBox.Show("用戶名或密碼錯誤!");
    }
}

資料存取方法

使用 SqlConnection、SqlCommand 搭配預存程序,參數化查詢避免 SQL Injection:

private string LoginUser(string user)
{
    using (SqlConnection conn = new SqlConnection(connString))
    using (SqlCommand cmd = new SqlCommand("Login", conn))
    {
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Parameters.AddWithValue("@Name", user);
        conn.Open();
        using (SqlDataAdapter da = new SqlDataAdapter(cmd))
        {
            DataSet ds = new DataSet();
            da.Fill(ds);
            return ds.Tables[0].Rows[0]["UserPasswd"].ToString();
        }
    }
}

Form2:主視窗與權限傳遞

Form2 為主程式進入點,建構子中以 ShowDialog(this) 開啟登入視窗,並將自己傳遞為 Owner。登入成功後,Form1 可透過 this.Owner 取得 Form2 實例,並設定公開屬性 getUserName 傳回登入帳號,供後續權限判斷使用。

改進建議與最佳實務

  • 密碼加密:生產環境切勿明文儲存密碼,應使用 BCrypt、PBKDF2 等單向雜湊
  • 參數化查詢:範例已使用參數,避免字串拼接
  • 連線字串外部化:連線字串應放在 app.config 或 appsettings.json
  • using 區塊:確保連線、命令、資料配接器正確釋放
  • 非同步操作:可改用 await cmd.ExecuteReaderAsync() 避免 UI 凍結

完整程式碼下載

完整專案程式碼可參考原文附件,包含 Form1、Form2 完整實作與資料庫腳本。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved