2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

フォームアプリ備忘録_C#で簡易ログイン機能を実装!

Last updated at Posted at 2024-03-13

FormApplication LOGIN機能

C#とSQLite3を用いて、簡単なLOGIN機能を実装しています。
記述形式や冗長なコードだらけですが、スキルアップに伴って修正していきます。

今回は入力されたユーザ名を条件にしたSQL文で当該ユーザのパスワードを抽出し、
それをユーザの入力したパスワードと照合します。

以下コードになります。

Form

Form.cs
using System;
using System.Windows.Forms;

namespace LoginCRUD
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void BtnLogin_Click_1(object sender, EventArgs e)
        {
            ClassLogin login = new ClassLogin();
            bool ret = false;
            //空文字と入力データの長さをチェック
            ret = login.Check(TxtUser.Text, TxtPass.Text);
            if (ret == false)
            {
                return;
            }
            //パスワード認証
            ret = login.Authenticate(TxtUser.Text, TxtPass.Text);
            if (ret)
            {
                MessageBox.Show("SUCCESS!");
                var form2 = new Form2();
                form2.Show();

                this.Hide();
            }
            else
            {
                MessageBox.Show("FAIL!!");
            }
        }

        private void BtnCancel_Click(object sender, EventArgs e)
        {
            this.Close();
        }
    }
}

Class

次にクラスです。

ClassLogin.cs
using System;
using System.Data.SQLite;
using System.Windows.Forms;

namespace LoginCRUD
{
    internal class ClassLogin
    {
        //プロパティ 属性
        public string result { get; set; }
        public string resultPassData { get; set; }
        public string username { get; set; }
        public string password { get; set; }
        public string dbsource { get; set; }
        public string sqlcmdtxt { get; set; }


        //コンストラクター
        public ClassLogin()
        {
            result = string.Empty;
            resultPassData = string.Empty;
            username = string.Empty;
            password = string.Empty;
            dbsource = string.Empty;
            sqlcmdtxt = string.Empty;
        }

        public bool Authenticate(string textBoxUser, string textBoxPass)
        {
            username = textBoxUser.ToLower();
            password = textBoxPass;
            dbsource = @"Data source=C:\Users\OOO\source\repos\WindowsFormsApp1\DB\TEST_DB";
            sqlcmdtxt = "SELECT password FROM TEST_TABLE WHERE name = :name";

            using (SQLiteConnection con = new SQLiteConnection(dbsource))
            {
                try
                {
                    con.Open();
                    SQLiteCommand cmd = new SQLiteCommand(sqlcmdtxt, con);
                    cmd.Parameters.Add(new SQLiteParameter(":name", username));
                    SQLiteDataReader reader = cmd.ExecuteReader();

                    while (reader.Read())
                    {
                        result = reader.GetString(0);
                    }

                    if (result == "")
                    {
                        MessageBox.Show("User not found!");
                        return false;
                    }
                    string resultPassData = Convert.ToString(result);

                    if (!resultPassData.Equals(password, StringComparison.OrdinalIgnoreCase))
                    {
                        MessageBox.Show("Password is incorrect!");
                        return false;
                    }
                    return true;
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.ToString());
                    return false;
                }
            }
        }

        public bool Check(string textBoxUser, string textBoxPass)
        {
            username = textBoxUser.ToLower();
            password = textBoxPass;
            //必須チェック 比較演算子はあえて繋げない
            if (username == "")
            {
                MessageBox.Show("Username is EMPTY!");
                return false;
            }
            if (password == "")
            {
                MessageBox.Show("Password is EMPTY!");
                return false;
            }

            //文字数チェック 比較演算子はあえて繋げない
            if (username.Length > 10)
            {
                MessageBox.Show("Invaild input data!");
                return false;
            }
            if (password.Length > 10)
            {
                MessageBox.Show("Invaild input data!");
                return false;
            }
            return true;
        }
    }
}

まとめ

ログイン成功した後のフォーム画面遷移で、CRUD機能のフォームへつなげたいと思います!

if (username == "")
            {
                MessageBox.Show("Username is EMPTY!");
                return false;
            }
            if (password == "")
            {
                MessageBox.Show("Password is EMPTY!");
                return false;
            }

            //文字数チェック 比較演算子はあえて繋げない
            if (username.Length > 10)
            {
                MessageBox.Show("Invaild input data!");
                return false;
            }
            if (password.Length > 10)
            {
                MessageBox.Show("Invaild input data!");
                return false;
            }
            return true;

Form1のテキストボックスの値をクラスで定義したメソッドとして扱いたい場合、
現在のように引数として渡してあげるのがよろしいのでしょうか?
まあ、いまは動くからよしとします。
これからの学習で気づきがあると思うので、その都度修正していこうと思います。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?