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

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

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

以下コードになります。


## Form
``` C#: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
次にクラスです。
```C#: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のテキストボックスの値をクラスで定義したメソッドとして扱いたい場合、
現在のように引数として渡してあげるのがよろしいのでしょうか？
まあ、いまは動くからよしとします。
これからの学習で気づきがあると思うので、その都度修正していこうと思います。