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

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

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

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

SQLite

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

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

Q&A

解決済

2回答

9715閲覧

C# Windowフォームでログイン画面を実装中です

yamaguti

総合スコア185

C#

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

SQLite

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

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

0グッド

0クリップ

投稿2017/01/10 15:03

お世話になります。

ログイン画面を実装中なのですが、
うまくいきません。

DBのユーザマスタから、SELECTした結果をそれぞれ、変数に入れてテキストボックスの入力と比較しようとしているのですが
変数を呼び出せません。
また、こんな書き方ではなくもっとこうしろという指摘があればぜひよろしくお願い致します。

C#

1using System; 2using System.Collections.Generic; 3using System.ComponentModel; 4using System.Data; 5using System.Data.SQLite; 6using System.Drawing; 7using System.Linq; 8using System.Text; 9using System.Threading.Tasks; 10using System.Windows.Forms; 11 12namespace WindowsFormsApplication4 13{ 14 public partial class Login : Form 15 { 16 public Login() 17 { 18 InitializeComponent(); 19 } 20 21 public void buttonLogin_Click(object sender, EventArgs e) 22 { 23 string dbConnectionString = "Data Source = E:\\myfriend.sqlite3"; 24 using (SQLiteConnection cn = new SQLiteConnection(dbConnectionString)) 25 { 26 cn.Open(); 27 using (SQLiteTransaction trans = cn.BeginTransaction()) 28 { 29 SQLiteCommand cmd = cn.CreateCommand(); 30 //ログインマスターSELECT 31 cmd.CommandText = "select NO from Login_kanri"; 32 using (SQLiteDataReader reader = cmd.ExecuteReader()) { 33 while (reader.Read()) { 34 var ID = reader; 35 36 } 37 } 38 cmd.CommandText = "select PW from Login_kanri"; 39 using (SQLiteDataReader reader = cmd.ExecuteReader()) 40 { 41 while (reader.Read()) 42 { 43 var PW = reader; 44 45 } 46 } 47 cn.Close(); 48 } 49 } 50 51 //登録画面に遷移 52 Touroku Touroku = new Touroku(); 53 54 Touroku.Show(); 55 //ログイン画面を閉じる 56 this.Visible = false; 57 } 58 59 private void buttonMaster_Click(object sender, EventArgs e) 60 { 61 Master Master = new Master(); 62 Master.Show(); 63 this.Visible = false; 64 } 65 66 private void Login_Load(object sender, EventArgs e) 67 { 68 this.ActiveControl = this.textLogin; 69 } 70 71 private void textLogin_TextChanged(object sender, EventArgs e) 72 { 73 74 } 75 } 76} 77

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

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

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

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

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

guest

回答2

0

ベストアンサー

yamagutiさん、こちらの問題はその後いかがですか?
コードを見た感じでは、データ取得後に、そこから値の取出し方がわからないように見受けられました。

using (SQLiteDataReader reader = cmd.ExecuteReader()) { while (reader.Read()) { var ID = reader; } }

とありますが、 ver ID = reader; としていますが、これでは、DataReaderから目的のフィールドの値は取得できないと思います。(※すみません、環境整えるのが少々手間でしたので、実際に試せていません)
おそらく、var ID = reader["ID"].ToString();のようにする必要があるはずです。

以下を参考にしてこの回答をしています。
C#/.NET で SQLite を使う基本中のキホン | うめつる開発室
以下、記事からの抜粋です。

using (SQLiteCommand command = conn.CreateCommand()) { command.CommandText = "SELECT * from member WHERE 'email'='" + temail + "'"; using (SQLiteDataReader reader = command.ExecuteReader()) { while (reader.Read()) { int id = Convert.ToInt32(reader["id"].ToString()); string name = reader["name"].ToString(); string email = reader["email"].ToString(); result.Add(new SelectResult(id, name, email)); } } }

readerの後に、[]で囲い、そこにテーブルでのフィールド名を指定しています。
まずはこの情報で次のステップに進めたかご連絡いただければ幸いです。

頑張ってください!

投稿2017/01/12 02:11

rrryutaro

総合スコア146

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

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

yamaguti

2017/01/17 10:03

ご参考にさせて頂きましたありがとうございます。
guest

0

質問文のコードでは変数ID、PWをどう使いたいのか分からないですが気になる点を。

・ID、PWがwhileループの中で宣言されているので、ループを抜けたら内容が失われます。
※「C# 変数 スコープ」で調べてみてください。

・ID、PWをwhileループ内で上書きしているので、SQLの取得結果が複数ある場合最後の1レコード分の内容しか変数に格納されないのではないでしょうか。

投稿2017/01/10 23:35

ynakano

総合スコア1894

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

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

yamaguti

2017/01/11 04:21

ご回答ありがとうございます。 >ID、PWがwhileループの中で宣言されているので、ループを抜けたら内容が失われます。 そうなのですか。 では、select * from Login_kanriにしてIDとPWをそれぞれ変数に入れるにはどうすればよいでしょうか。 >コードでは変数ID、PWをどう使いたいのか分からないですが気になる点を。 それぞれselectした結果を変数にいれこみ、テキストボックスの入力値を比較しようとしています
ynakano

2017/01/11 06:10

> では、select * from Login_kanriにしてIDとPWをそれぞれ変数に入れるにはどうすればよいでしょうか。 変数宣言をループの外でしてください。 「ループの外」と言っても色々と考えられますが、それはyamagutiさんが作りたいアプリにとって必要十分なスコープとなるようにしてください、としか言いようがないと思います。 > それぞれselectした結果を変数にいれこみ これはSQLの結果が複数ある場合、その全てを変数に格納するという事でしょうか。 であれば配列に格納するなりする必要があります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問