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

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

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

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

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Windows Forms

Windows Forms(WinForms)はMicrosoft .NET フレームワークに含まれる視覚的なアプリケーションのプログラミングインターフェイス(API)です。WinFormsは管理されているコードの既存のWindowsのAPIをラップすることで元のMicrosoft Windowsのインターフェイスのエレメントにアクセスすることができます。

Q&A

解決済

2回答

2045閲覧

windowsformsにsqlserverのDB検索機能を作りたい

natume4948

総合スコア9

C#

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

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Windows Forms

Windows Forms(WinForms)はMicrosoft .NET フレームワークに含まれる視覚的なアプリケーションのプログラミングインターフェイス(API)です。WinFormsは管理されているコードの既存のWindowsのAPIをラップすることで元のMicrosoft Windowsのインターフェイスのエレメントにアクセスすることができます。

0グッド

0クリップ

投稿2021/04/13 00:34

編集2021/04/13 00:51

前提・実現したいこと

実現したいこと
・SQLのDB検索機能を作りたい
・SQLのDBはwindowsFormsのDataGridViewに表示させる
前提
・sqlserverへの接続は済ませてある。
ここに質問の内容を詳しく書いてください。
visual studioのwindowsformsでsqlserverから取ってきたDBの検索機能を作っていㇽのですが、検索機能を作ったのはいいのですが、何も返ってこないので詰まっています。
出来れば、何で詰まっているのかのご助言をいただけたらと思います。

発生している問題・エラーメッセージ

エラーメッセージ

該当のソースコード

C#

1using System; 2using System.Collections.Generic; 3using System.ComponentModel; 4using System.Data; 5using System.Drawing; 6using System.Linq; 7using System.Text; 8using System.Threading.Tasks; 9using System.Windows.Forms; 10using System.Data.SqlClient; 11using System.Diagnostics; 12 13namespace WIN課題4 14{ 15 public partial class Form1 : Form 16 { 17 //▼変数定義 18 string id = ""; 19 string music = ""; 20 string artist = ""; 21 string album = ""; 22 string date = ""; 23 string genre = ""; 24 DialogResult result; 25 DataTable dataT = new DataTable(); 26 //テキストボックスのテキスト用配列 27 string[] search = new string[6]; 28 //項目名用配列 29 string[] yourName = { "MusicID", "MusicName", "ArtistName", "AlbumName", "ReleaseDate", "Genre" }; 30 //▲変数定義 31 //▼メソッド定義 32 //SQL文作成メソッド 33 void Sql(int index, string sq) 34 { 35 search[index] = sq; 36 //全体で使用する基本のSQL、1=1はAND処理を楽にするため 37 string sql = "SELECT * FROM music WHERE 1 = 1"; 38 //string sql = "SELECT * FROM music WHERE 1 = 1 AND CAST(TRACK_NO AS VARCHAR) LIKE '1%'"; 39 for (int i = 0; i < search.Length; i++) 40 { 41 string sea = search[i]; 42 //トラックナンバー用処理 43 if (i == 0) 44 { 45 //前方一致処理 46 sql += " AND " + "CAST(" + yourName[i] + " AS VARCHAR) LIKE '" + sea + "%'"; 47 } 48 //リリース用処理 49 else if (i == 4) 50 { 51 //後方一致処理 52 sql += " AND " + "CAST(" + yourName[i] + " AS VARCHAR) LIKE '%" + sea + "'"; 53 } 54 else 55 { 56 //部分一致処理 57 sql += " AND " + yourName[i] + " LIKE '%" + sea + "%'"; 58 } 59 } 60 Debug.WriteLine("xxxxxxxxxxxxxxxxx"); 61 Debug.WriteLine(sql); 62 Debug.WriteLine("xxxxxxxxxxxxxxxxx"); 63 //データベース描画前に一度削除 64 dataGridView1.DataSource = ""; 65 //sql文エラーに備えて 66 try 67 { 68 //SQL文実行処理 69 SqlConnection sqlconn = new SqlConnection(Properties.Settings.Default.sqlserver); 70 SqlCommand command = new SqlCommand(sql, sqlconn); 71 SqlDataAdapter adapter = new SqlDataAdapter(command); 72 DataTable dt = new DataTable(); 73 adapter.Fill(dt); 74 //データベースをGridに渡して表示 75 dataGridView1.DataSource = dt; 76 dataT = dt; 77 //検索結果の件数を表示 78 int count = dt.Rows.Count; 79 label1.Text = count.ToString(); 80 } 81 catch (Exception ex) 82 { 83 //エラー表示 84 MessageBox.Show(ex.ToString()); 85 } 86 } 87 88 public Form1() 89 { 90 InitializeComponent(); 91 } 92 93 private void Form1_Load(object sender, EventArgs e) 94 { 95 //maxとminを同じにすることでサイズ固定 96 this.MaximumSize = this.Size; 97 this.MinimumSize = this.Size; 98 //最大化・最小化無効 99 this.MaximizeBox = false; 100 this.MinimizeBox = false; 101 SqlConnection sqlconn = new SqlConnection(Properties.Settings.Default.sqlserver); 102 sqlconn.Open(); 103 SqlCommand command = new SqlCommand("SELECT * from Musics", sqlconn); 104 SqlDataAdapter adapter = new SqlDataAdapter(command); 105 DataTable dt = new DataTable(); 106 adapter.Fill(dt); 107 dataGridView1.DataSource = dt; 108 dataT = dt; 109 //検索結果の件数を表示 110 int count = dt.Rows.Count; 111 label1.Text = count.ToString(); 112 } 113 114 115 private void textBox1_TextChanged(object sender, EventArgs e) 116 { 117 id = textBox1.Text; 118 //値の種類とテキストボックスと項目名を渡す 119 Sql(0, id); 120 } 121 122 private void textBox2_TextChanged(object sender, EventArgs e) 123 { 124 music = textBox2.Text; 125 Sql(1, music); 126 } 127 128 private void textBox3_TextChanged(object sender, EventArgs e) 129 { 130 artist = textBox3.Text; 131 Sql(2, artist); 132 } 133 134 private void textBox4_TextChanged(object sender, EventArgs e) 135 { 136 album = textBox4.Text; 137 Sql(3, album); 138 139 } 140 141 private void textBox5_TextChanged(object sender, EventArgs e) 142 { 143 date = textBox5.Text; 144 Sql(4, date); 145 146 } 147 148 private void textBox6_TextChanged(object sender, EventArgs e) 149 { 150 genre = textBox6.Text; 151 Sql(5, genre); 152 } 153 154 private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e) 155 { 156 157 } 158 159 private void button1_Click(object sender, EventArgs e) 160 { 161 //ダイアログのYesNoを取得 162 MessageBox.Show("一覧データを出力しますか?", "出力の確認", MessageBoxButtons.YesNo, MessageBoxIcon.Question); 163 MessageBox.Show("一覧データを出力しました"); 164 165 } 166 167 168 private void label1_Click(object sender, EventArgs e) 169 { 170 171 } 172 } 173} 174

補足情報(FW/ツールのバージョンなど)

visual studio 2019イメージ説明

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

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

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

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

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

guest

回答2

0

ベストアンサー

デバッグをするつもりはありませんので、確認事項として

Debug.WriteLine(sql);

で出力されたSQL文を、SQLServer や VSのSQLクエリ発行で、実行した場合に結果は望み通りになりますか?

結果が望み通りに鳴るのなら、渡しているSQLは正しいでしょう。
それでも結果が違ってくるのなら、文字コードの問題が関係していると思います。

DBの中に入っている文字コードと検索時の文字コードは同一ですか?

投稿2021/04/13 00:42

nfox

総合スコア229

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

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

natume4948

2021/04/13 01:26

回答ありがとうございます。DBの文字コードと検索時の文字コードが違っていました。おかげさまで解決しました。
guest

0

デバックをしましょう。
当方がデバックするなら、ステップ実行で、
Form1_Loadイベント内のadapter.Fill(dt);の実行直後の
dtが正常に取得できていることから確認すると思います。

このようにどの行までうまく動作していて
どの行からうまくいかなくなるのかを確認し、
その状況を掲示板に書きましょう。

投稿2021/04/13 00:56

kikukiku

総合スコア514

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

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

Zuishin

2022/02/27 03:59

デバックではなく、デバッグです。 バグを取ること、つまりプログラムの不具合をなくすことをデバッグと言います。 バグの原因がわからなくて困っている人の質問に「デバッグしましょう」という回答は無意味です。 デバッグしたくて、その方法を聞いているので。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問