iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 24
1
Software Development

從問題理解與活用SQL語法系列 第 24

第二十四堂:英文單字測驗程式 - 學生帳號資料管理(3) - 學生帳號是否已經存在資料庫 (ExecuteScalar 取得單一值)

  • 分享至 

  • xImage
  •  

一、課程程式專案與資料庫範本SQL Github

今天的Playground範例程式碼與範本資料SQL以更新至Github
https://github.com/ted59438/EnglishVocabulary_MySQL

  • EnglishVocabularyLearning.exe:英文單字測驗最終的實作結果
  • DBPlayground:課堂的C#範例專案
  • EnglishVocabularyLearning_MySQL:C#練習專案
  • EnglishVocabulary.sql:MySQL的範本資料
  • EnglishVocabulary_MSSQL.sql:SQL Server 的範本資料

二、24~25堂作業

  1. 在「單字管理作業」,可以新增分類,如果分類已存在則不可以重複新增
    https://ithelp.ithome.com.tw/upload/images/20191010/20120331KNixsWmPN3.png
    https://ithelp.ithome.com.tw/upload/images/20191010/20120331WFd6LUriby.png

  2. 在「單字管理作業」,可以在指定的分類底下新增單字
    https://ithelp.ithome.com.tw/upload/images/20191010/20120331qF3kJFCvkr.png

三、課堂內容

(一) 實作內容

確認要新增的使用者是否已存在於資料庫
https://ithelp.ithome.com.tw/upload/images/20191010/20120331pMHfjDPLBW.png

(二) 實作程式碼


/// <summary>
/// 新增學生按鈕事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void insertStudentBtn_Click(object sender, EventArgs e)
{
    string sql;
    Dictionary<string, object> parameters;

    sql = @"SELECT COUNT(StudentID)
            FROM Student
            WHERE Username = @Username";
    parameters = new Dictionary<string, object>()
    {
        {"Username", studentUsernameTextBox.Text }
    };

    try
    {
        if (queryScalar(sql, parameters) != 0)
        {
            MessageBox.Show("學生帳號已經存在!", "錯誤", MessageBoxButtons.OK, MessageBoxIcon.Error);
            return;
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message, "錯誤", MessageBoxButtons.OK, MessageBoxIcon.Error);
        return;
    }
}

/// <summary>
/// 基本查詢:傳回單一值
/// </summary>
/// <param name="sql"></param>
/// <param name="parameters"></param>
/// <returns></returns>
private int queryScalar(string sql, Dictionary<string, object> parameters)
{
    MySqlCommand command = getAndBindCommand(sql, parameters);

    try
    {
        command.Connection.Open();
        int result = Convert.ToInt32(command.ExecuteScalar());
        command.Connection.Close();

        return result;
    }
    catch (Exception)
    {
        throw;
    }
}

/// <summary>
/// 建立Connection→設定Command→綁定參數
/// </summary>
/// <param name="sql"></param>
/// <param name="parameters"></param>
/// <returns></returns>
private MySqlCommand getAndBindCommand(string sql, Dictionary<string, object> parameters)
{
    // 建立連線物件 (SqlConnection)
    MySqlConnection connection = new MySqlConnection();
    connection.ConnectionString = getConnectString();

    // 建立指令物件,設定SQL語法 (SqlCommand)
    MySqlCommand command = new MySqlCommand();
    command.Connection = connection;
    command.CommandText = sql;

    // 將參數綁定到語法上
    foreach (KeyValuePair<string, object> parameter in parameters)
    {
        command.Parameters.AddWithValue(parameter.Key, parameter.Value);
    }

    return command;
}

上一篇
第二十三堂:英文單字測驗程式 - 學生帳號資料管理(2) - 取得指定的學生 (Bind SQL Parameter)
下一篇
第二十五堂:英文單字測驗程式 - 學生帳號資料管理(4) - 新增學生帳號 (Transcation、雜湊)
系列文
從問題理解與活用SQL語法30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言