前提・実現したいこと
実現したいこと
・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/ツールのバージョンなど)
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/04/13 01:26