質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

Q&A

解決済

1回答

2008閲覧

型のキャスト

yamaguti

総合スコア185

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

0グッド

0クリップ

投稿2017/01/16 11:58

お世話になります。

パスワードを管理するシステムのログイン画面を実装しております。
そこで、DBから取ったデータをテキストボックスの入力値と比較したいのですがうまくいきません。
ご教示の程のよろしくお願い致します。

コメントの //SELECT文結果取得(ID)部分です。

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Data.SQLite; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace WindowsFormsApplication4 { public partial class Login : Form { public Login() { InitializeComponent(); } public void buttonLogin_Click(object sender, EventArgs e) { string dbConnectionString = "Data Source = C:\\Users/myfriend.sqlite3"; using (SQLiteConnection cn = new SQLiteConnection(dbConnectionString)) { cn.Open(); using (SQLiteTransaction trans = cn.BeginTransaction()) { SQLiteCommand cmd = cn.CreateCommand(); //ログインマスターSELECT cmd.CommandText = "select ID from LOGIN"; using (SQLiteDataReader reader = cmd.ExecuteReader()) { //SELECT文結果取得(ID) var a = reader; var b = a.ToString(); //IDの一致判断 if (textLogin.Text == b) { } } cmd.CommandText = "select PW from LOGIN"; using (SQLiteDataReader reader = cmd.ExecuteReader()) { //SELECT文結果取得(PW) var PW = reader; } cn.Close(); } } //登録画面に遷移 Touroku Touroku = new Touroku(); Touroku.Show(); //ログイン画面を閉じる this.Visible = false; } private void buttonMaster_Click(object sender, EventArgs e) { Master Master = new Master(); Master.Show(); this.Visible = false; } private void Login_Load(object sender, EventArgs e) { this.ActiveControl = this.textLogin; } private void textLogin_TextChanged(object sender, EventArgs e) { } } }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/01/16 12:07

ASP.NET のタグがついていますが、コードを見ると Login : Form と Windows Forms アプリのように見えます。どっちなんですか?
guest

回答1

0

ベストアンサー

System.Data.SQLiteをご使用ですね。
SQLiteに限らず、ADO.NETはどのDBでもだいたい同じ書き方になるので
基本を覚えておきましょう。

簡単に書き直してみました。
同じテーブルからIDとパスワードを取るのであれば、1回のSQLでまとめて読むのが良いと思います。

C#

1//ここの変数に値を取ってくることにします 2string id = null; 3string pw = null; 4 5//※ \ と / が混ざっているのがすごく気になる…。 6// Windows環境なら通常は \ を使います 7//string dbConnectionString = "Data Source = C:\\Users/myfriend.sqlite3"; 8string dbConnectionString = @"Data Source = C:\Users\myfriend.sqlite3"; 9 10//※usingをぬける際にConnectionは勝手にCloseされます 11using (SQLiteConnection cn = new SQLiteConnection(dbConnectionString)) 12{ 13 cn.Open(); 14 15 //これだけの処理ならわざわざBeginTransactionする必要はないかも… 16 using (SQLiteTransaction trans = cn.BeginTransaction()) 17 using (var cmd = cn.CreateCommand()) //コマンドも usingしたほうがいいでしょう 18 { 19 cmd.CommandText = "select ID, PW from LOGIN"; 20 using (SQLiteDataReader reader = cmd.ExecuteReader()) 21 { 22 //レコードが複数件取得される場合は 23 // while (reader.Read()){...} とやってループさせるなど 24 if (reader.Read()) 25 { 26 //何列目のカラムかわかっているときは 27 //直接 reader.GetString(0) と数字で指定しても良い 28 id = reader.GetString(reader.GetOrdinal("id")); 29 pw = reader.GetString(reader.GetOrdinal("pw")); 30 } 31 } 32 } 33} 34 35//取ってきた情報と一致判定 36if (textLogin.Text == id) {...} 37

なお、上記の例だとテーブルには1レコードしか入っていないことが前提です。
複数ユーザー分のログインIDレコードが格納される想定でしたら、

  • SQL分にWHERE句を追加して取得されるレコードを絞り込む
  • while (reader.Read()){...} とやって一致するレコードが見つかるまでループさせる

等の処理が必要になると思います。

また、試してみてうまくいかない場合は、

  1. DataSourceで指定した場所のファイルをちゃんと見に行けているか
  2. テーブルレコードの値が正しくとれているか
  3. TextBoxに入力された値との一致判定が思ったとおりに機能しているか

というように、1つずつ順を追って確認してみてください。

投稿2017/01/16 15:08

oika

総合スコア425

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問