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

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

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

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

DB2

DB2(IBM Database2)は、IBMのリレーショナルデータベース管理システム製品です。 UNIXとWindows、IBM社のメインフレームOS用が用意されており、 幅広いプラットフォームに対応しています。

Q&A

解決済

1回答

18015閲覧

DBから取得した結果をC#でラベルに表示したい

maam

総合スコア55

C#

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

DB2

DB2(IBM Database2)は、IBMのリレーショナルデータベース管理システム製品です。 UNIXとWindows、IBM社のメインフレームOS用が用意されており、 幅広いプラットフォームに対応しています。

0グッド

0クリップ

投稿2018/12/03 05:48

編集2018/12/03 06:00

会員の検索表示画面を作成しています。
検索表示画面で姓を入力し検索ボタンを押すと、該当する会員のフルネーム、電話番号、住所が表示されるプログラムを作っています。
SQL文で検索条件を書き、検索結果をラベルに表示したいです。結果はひとつではなく、複数該当する場合は全ての結果を表示するのが条件です。
var adapter = new SqlDataAdapter(command);
adapter.Fill(table);

いろいろ調べてみるとこういった形が多いのですが、これでは全ての検索結果を表示できませんでした。なにかアドバイスをいただけないでしょうか。

private void KensakuBt_Click(object sender, EventArgs e) { // 接続文字列の取得 var connectionString = ConfigurationManager.ConnectionStrings["sqlsvr"].ConnectionString; // データベース接続の準備 using (var connection = new SqlConnection(connectionString)) using (var command = connection.CreateCommand()) { String sei = textBox1.Text; String mei = textBox2.Text; String man = radioButton1.Text; String woman = radioButton2.Text; String yuubin = textBox3.Text; try { //データベースの接続開始 connection.Open(); // SQLの条件設定 command.CommandText = @"SELECT TOP 10 count * FROM MEMBER_MASTER"   //上位10件の表示 + "WHERE MEMBER_MASTER.name1 LIKE '%" + sei + "%'"  //姓との部分一致 + "WHERE MEMBER_MASTER.name2 LIKE '%" + mei + "%'"  //名との部分一致 + "WHERE MEMBER_MASTER.gender = " + man + "WHERE MEMBER_MASTER.gender = " + woman + "WHERE MEMBER_MASTER.adress = " + yuubin + "ORDER BY MEMBER_MASTER.id"; //IDの昇順に表示

この後にどう表示すればよいでしょうか

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

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

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

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

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

YAmaGNZ

2018/12/03 05:55

結果が複数の場合、どのようにラベルに表示するおつもりでしょうか? また、提示されたコードは表示に関するコードは一切含まれていませんが、どのようなコードで表示できないと言われているのでしょうか?
maam

2018/12/03 06:03

前回の質問とは別です。自分で調べ終わりました。
Zuishin

2018/12/03 06:05

コメントで上位 10 件と書いてありますが。
Zuishin

2018/12/03 06:06

調べ終わったなら解決しておいてください。役に立った回答があるならベストアンサーに選び、そうでなければ自己解決として解決方法を初心者にわかりやすく詳しく書いてください。
YAmaGNZ

2018/12/03 07:07 編集

もう少し落ち着いて質問の修正をされたほうがよろしいかと思います。修正されたコードですと、SQLを実行していませんし、構築したSQLも実行できないものになっています。
maam

2018/12/04 02:51

皆様ご指摘いただきありがとうございます。皆様のおっしゃる通りです。質問を投げやりの状態にしていたらいつまでたっても理解できないと思うので、ここに頼らないようにします。すみません
Zuishin

2018/12/04 03:04

頼る頼らない以前にいつまでも未解決で置いておかず解決してください。
guest

回答1

0

ベストアンサー

まず、現在のコードはSQL部分が適切ではありません。

  • 「複数該当する場合は全ての結果を表示する」のであれば、 TOP 10 count という部分は不要
  • WHERE が何度も登場するのはSQL文法的にNG(複数の条件を記述する場合は ANDOR を使用する)

詳しく説明するためには、検索対象のテーブル構造を示していただく必要があります。
(その場合は create table 文だと回答しやすいです)
現在は示されていないため、SQL部分の詳しい説明は省きます。
(SQLについての参考書などを確認するか、あるいはSQL単体で別途質問を起こしてください)

SQL Server に接続して情報を参照する方法については、こちら↓が参考になるかと思います。
C# で SQL Server から SELECT文 の 実行結果 を 取得する 方法 - galife
「1行ずつ読み込む (SqlDataReader)」の方法を採用したとして、以下のようなコードになるでしょうか。
※説明を簡単にするため、検索結果を List<string> に格納しています
※実際に動作確認をしたわけではないので誤りが含まれている可能性があります、すみません
※★の箇所は適宜見直してください

csharp

1// 検索結果格納用 2var results = new List<string>(); 3 4// 接続文字列の取得 5var connectionString = ConfigurationManager.ConnectionStrings["sqlsvr"].ConnectionString; 6 7// データベース接続の準備 8using (var connection = new SqlConnection(connectionString)) 9using (var command = connection.CreateCommand()) 10{ 11 string sei = textBox1.Text; 12 string mei = textBox2.Text; 13 string man = radioButton1.Text; 14 string woman = radioButton2.Text; 15 string yuubin = textBox3.Text; 16 try 17 { 18 //データベースの接続開始 19 connection.Open(); 20 21 // SQLの条件設定 ★要件に対して適切なSQL文かどうかが不明なため、適宜変更してください 22 command.CommandText = 23 @"SELECT * FROM MEMBER_MASTER" 24 + "WHERE MEMBER_MASTER.name1 LIKE '%" + sei + "%'" //姓との部分一致 25 + "AND MEMBER_MASTER.name2 LIKE '%" + mei + "%'" //名との部分一致 26 + "AND MEMBER_MASTER.gender = " + man 27 + "AND MEMBER_MASTER.gender = " + woman 28 + "AND MEMBER_MASTER.adress = " + yuubin 29 + "ORDER BY MEMBER_MASTER.id"; //IDの昇順に表示 30 31 // SQLを実行し、結果を results に格納する 32 using (var reader = command.ExecuteReader()) 33 { 34 while (reader.Read() == true) 35 { 36 results.Add( 37 /*フルネーム*/(reader["name1"] as string) + (reader["name2"] as string) + " " + 38 /*電話番号*/ (reader["tel"/*★列名は適宜変更してください*/] as string) + " " + 39 /*住所*/ (reader["adress"] as string) 40 ); 41 } 42 } 43 } 44 catch (Exception exception) 45 { 46 Console.WriteLine(exception.Message); 47 throw; 48 } 49 finally 50 { 51 // データベースの接続終了 52 connection.Close(); 53 } 54} 55 56// results の内容をラベルに表示 57// ★label1 というラベル(AutoSizeプロパティがtrue)がどこかに存在し、そこに表示するものとします 58string resultText = string.Empty; 59foreach (string item in results) 60{ 61 resultText += item + "\r\n"; 62} 63label1.Text = resultText;

いくつか不明な点はありましたが、とりあえずわかる範囲で回答しました。
いろいろわからない中での手探りは大変かと思いますが、頑張ってください。

投稿2018/12/03 07:52

alg

総合スコア2019

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

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

maam

2018/12/04 02:57

algさん 丁寧なご回答、本当にありがとうございます。コピペするだけでなく、コメントと共に1文1文を読んでいくと意味が理解できました!labelへの表示についてはもうひと工夫必要みたいなので、あとは自力で頑張ってみます。本当にありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問