前提
WindowsFormにはテキストボックスが2つとボタンが1つあります。
1つのテキストボックスにキーワードを入れて、ボタンを押すことでもう1つテキストボックスにキーワードが一致したものだけが一覧で表示する
実現したいこと
C# では、テキストボックス(名前のプロパティ:searchBox)内の内容を検索し、
その内容を SqlParameter で@Keywordというパラメータに格納することが必須である。
例で以下を使うことです。
command.Parameters.Add("@Keyword", SqlDbType.NVarChar); command.Parameters["@Keyword"].Value = keywordText;
発生している問題・エラーメッセージ
テキストボックス内に”ん”というキーワードを入力し、ボタンを押したとき
SQLは実行されたが、DataTableの変数itemTableには
本来はキーワード”ん”に一致するリンゴやみかんのデータが入っているが
一致するデータが入っていなかった。
下に該当するコードをかきました。
なぜ一致するデータするないのか、
また、一致するデータをitemTableに入るためにどのようなコードを書けばよいか教えてください。
該当のソースコード
C#
1public DataTable GetData() 2 { 3 DataTable itemTable = new DataTable(); 4 // 接続文字列の取得 5 var connectionString = ConfigurationManager.ConnectionStrings["db"].ConnectionString; 6 using (var connection = new SqlConnection(connectionString)) 7 using (var command = connection.CreateCommand()) 8 { 9 try 10 { 11 // データベースの接続開始 12 connection.Open(); 13 //テキストボックスのキーワード 14 string keywordText = searchBox.Text; 15 16 // SQLの設定 17 command.CommandText = @"SELECT * FROM item WHERE name LIKE '%@Keyword%'"; 18 19 command.Parameters.AddWithValue("@Keyword", keywordText); 20 か 21 command.Parameters.Add("@Keyword", SqlDbType.NVarChar); 22 command.Parameters["@Keyword"].Value = keywordText; 23 を使用する 24 25 26 // SQLの実行 27 var adapter = new SqlDataAdapter(command); 28 adapter.Fill(itemTable); 29 30 } 31 catch (Exception exception) 32 { 33 throw; 34 } 35 finally 36 { 37 // データベースの接続終了 38 connection.Close(); 39 } 40 } 41 return itemTable; 42 } 43
データベースは以下のようになっている
SQL Server のテーブルの定義
CREATE TABLE item (
id INT NOT NULL PRIMARY KEY,
categoryId INT NOT NULL,
name NVARCHAR(max) NOT NULL,
price INT NOT NULL,
image NVARCHAR(max) NULL,
);
レコードを挿入
INSERT INTO m_item(categoryId, name, price, image)
VALUES(1, 'リンゴ', 200, 'apple.jpg',);
INSERT INTO m_item(categoryId, name, price, image)
VALUES(1, 'みかん', 150, 'orange.jpg');
INSERT INTO m_item(categoryId, name, price, image)
VALUES(2, 'ボールペン', 100, 'pen.jpg');
テーブル名:item
表
id categoryId name price image
1 1 リンゴ 200 apple.jpg
2 1 みかん 150 orange.jpg
3 2 ボールペン 100 pen.jpg
サンプルでは3つのレコードですが、
実際のテーブルは
カラム数:5カラム
レコード数:30
のテーブルとなっています
Windows 10 の Visual Studio 2022 で Windows Forms アプリです。
.NET6のFrameworkです。
回答1件
あなたの回答
tips
プレビュー