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

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

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

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

Visual Studio

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

Windows 7

Microsoft Windows 7は過去にリリースされたMicrosoft WindowsのOSであり、Windows8の1代前です。2009年の7月にリリースされ販売されました。Windows7の前はWindowsVistaで、その更に3年前にリリースされました。

SQL

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

Q&A

解決済

3回答

8691閲覧

C# SQL文 ユーザーに入力された検索条件でデータの絞り込み

退会済みユーザー

退会済みユーザー

総合スコア0

C#

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

Visual Studio

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

Windows 7

Microsoft Windows 7は過去にリリースされたMicrosoft WindowsのOSであり、Windows8の1代前です。2009年の7月にリリースされ販売されました。Windows7の前はWindowsVistaで、その更に3年前にリリースされました。

SQL

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

0グッド

0クリップ

投稿2018/05/01 00:14

編集2018/05/01 02:44

現在Visualstudio2015にてWindows Formで、SQLiteで作成されたDBをDataGridViewに表示させ、さらに表示したデータを「テーブル名」「カラム名」「文字列一致検索」の条件で絞り込み検索をさせたいです。
そこで現在SQL文の SQLiteCommand.CommandText にユーザよりtextBoxに入力された文字列を変数に格納しそれを使い検索をかけられれば。と思っております。

SQLDataAdapter.Fill();
で検索し表示させるときに、テーブル名やカラム等を

C#

1  string tableText = tableComboBox.Text; 2 string columnText = SearchComboBox.Text; 3 string searchWord = SearchTextBox.Text;

このように、フォームから入力されたtextBoxの値を変数に代入してその変数を使い
SQL文を作ろうと試みたのですが、変数として扱ってもらえず文字列として認識してしまい
Insufficient parameters supplied to the command
この例外が
SQLDataAdapter.Fill();
のところで出ます。
検索すると、'@'をつけるといいと書いてあったのですが

C#

1 string SqlCommandText = "select @columnText from @tableText where @searchWord";

結果は変わらず、うまくいきませんでした。
なにかいい方法はありませんか?
よろしくお願いいたします。

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

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

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

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

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

Kunihiro_Narita

2018/05/01 00:39

抽象的に「うまくいきませんでした。」ではなく、「期待している結果と、実際の結果」を書きましょう。抽象的に「何か間違っているので、正しい方法でやったらよいんじゃないかな?」って回答されても困るでしょう?
退会済みユーザー

退会済みユーザー

2018/05/01 00:44

はい。結果は変わらずです。Insufficient parameters supplied to the command 同じ例外が出ました。SQL文でユーザーに入力された検索条件でデータの絞り込みで変数を使用したいのです。
退会済みユーザー

退会済みユーザー

2018/05/01 02:29

あなたが何を作っているか(Windows Forms? WPF? ASP.NET Web Forms? その他?)と、開発環境(OS, .NET, Visual Studio, SQL Server のバージョン・エディションなど)を書いてください。
退会済みユーザー

退会済みユーザー

2018/05/01 02:53

やっぱり SQL Server ではなくて SQLite でしたか。そこは重要な情報なので、次回はきちんと書くようにしてください。SQL Server だと思ってレスを書いている回答者の皆さんに申し訳ないと思ってください。
退会済みユーザー

退会済みユーザー

2018/05/01 03:00

申し訳ありません。ご指摘ありがとうございます。
guest

回答3

0

こんにちは。
ここにサンプルがありますよ。

https://www.ipentec.com/document/csharp-sql-parameter-programming

投稿2018/05/01 01:36

cutedog

総合スコア177

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

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

退会済みユーザー

退会済みユーザー

2018/05/01 07:11

こちらの添付サイト大変参考になりました。 ありがとうございます! もっと知識を付けて頑張ります!!
guest

0

「パラメータクエリ」で検索してみて下さい。

「@~」と記述している変数はSQLServer内の変数であり、C#で宣言した変数とは全く別の物です。ADP.NETを使用している場合にはSqlCommandクラスのParametersコレクションを使って変数の受け渡しを行います。

ADP.NETに限らずC#からSQLのように言語の壁を越えてデータを渡す場合には、通常は何らかの処理が必要になります。

投稿2018/05/01 00:30

Kunihiro_Narita

総合スコア472

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

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

退会済みユーザー

退会済みユーザー

2018/05/01 07:11

コメントありがととうございました! 自分の知識不足を痛感いたしましたので少し戻って基礎知識から詰めなおしたいと思っております。 また機会がありましたらご助力ください。
guest

0

ベストアンサー

command.Parameters.Add() してますか?

C#

1using System; 2using System.Data.SQLite; 3using System.IO; 4 5namespace ConsoleApp1 6{ 7 class Program 8 { 9 static void Main(string[] args) 10 { 11 var fileName = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "untitled.db"); 12 using (var connection = new SQLiteConnection($"Data Source={fileName}")) 13 { 14 connection.Open(); 15 using (var transaction = connection.BeginTransaction()) 16 { 17 using (var command = connection.CreateCommand()) 18 { 19 command.CommandText = "create table untitled(id, name);"; 20 command.ExecuteNonQuery(); 21 } 22 using (var command = connection.CreateCommand()) 23 { 24 command.CommandText = "insert into untitled (id, name) values (@id, @name)"; 25 command.Parameters.Add(new SQLiteParameter("@id", 1)); 26 command.Parameters.Add(new SQLiteParameter("@name", "taro")); 27 command.ExecuteNonQuery(); 28 } 29 transaction.Commit(); 30 } 31 } 32 Console.ReadKey(); 33 } 34 } 35}

投稿2018/05/01 03:29

Zuishin

総合スコア28660

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

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

退会済みユーザー

退会済みユーザー

2018/05/01 03:51

Zuishin様 >>コメントありがとうございます。 添付していただいたソース調べていたときに似ているもの見つけたのですが、いまいち仕組みが理解できなかったので質問なのですが。(id , name)のところに変数を入れればよいのですか? 別サイトの似ているソースを見つけた時に、Command.Textの書式が自分がイメージしていた「SELECT~...」というものではなかったので違うと思いスルーしてしまっておりました。。
Zuishin

2018/05/01 04:04

そこはカラム名です。
Zuishin

2018/05/01 04:11

Kunihiro_Narita さんと cutedog さんの回答は読みましたか? @ をつけるといいという情報を見つけた時にも、ちゃんと使い方の説明が書いてあったはずですが読んでいませんよね? 適当にソースらしきものを見つけて切り貼りしたのでは完成しません。 理解して使わないとデータ全部壊れますよ。
退会済みユーザー

退会済みユーザー

2018/05/01 04:23

ご指摘ありがとうございます。 はい。読んでいるつもりです。 ですが、まだ理解できていないところが多くいろいろな手段を試しどのような動きになるのか模索中です。 カラム名以外の項目も動的にしたいです。
Zuishin

2018/05/01 04:33 編集

カラム名は動的でなく静的に与えています。 いろいろな手段で模索をする前に、説明をまず調べて読みましょう。 > insert into untitled (id, name) values (@id, @name) ここの (id, name) がカラム名で、id という名前のカラムと name という名前のカラムを表します。 カラムが分からなければ「データベース カラム」で調べてください。 (@id, @name) がパラメータで、command.Parameters.Add() したパラメータがここに展開されます。 変数が使えるのはここです。 パラメータが分からなければ「パラメータクエリ」で調べてください。
退会済みユーザー

退会済みユーザー

2018/05/01 04:45

細かく説明ありがとうございます。 "select columnText from tableText where searchWord" 今回自分はこのようにしているのですが、カラムは教えていただいた方法でやってみます。 テーブル名とwhereの条件はどのようにすればよいのでしょうか。
Zuishin

2018/05/01 04:46

なぜそれが私にわかると思うのですか? 実際のデータベースと自分の欲しいデータに合わせて SQL を組まなければなりません。
Zuishin

2018/05/01 04:51

そこまで何も知らないし知る気がないなら少し軌道修正してください。 SQLite ではなく SQL Server Express を使い、SQL やパラメータを使うのではなく Entity Framework を使うのがいいと思います。 そうすればコマンドを叩かなくてもマウス操作でデータベースと画面を同期できます。
Zuishin

2018/05/01 04:56

まずは書店で Entity Framework の本を一冊買ってきてそれを読みながら使い方を覚え、理解したうえで実際に作りたいものを作ってください。 遠回りのように見えるかもしれませんが、断片的なソースの切り貼りの方がかえって遠回りになります。
退会済みユーザー

退会済みユーザー

2018/05/01 04:58

すみません。質問の仕方が悪かったです。 テーブル名とwhereの条件部分もユーザに入力された値を使いたいのでそこも変数を使いたいのですが、 command.Parameters.Add() の要領で変数は使えるのでしょうか?
退会済みユーザー

退会済みユーザー

2018/05/01 07:09

添付先とても参考になりました。 ありがとうございます。 もっともっと勉強してがんばります。 初歩的なことばかり質問してすみません。 理解したいという気持ちはありますが、断片的な情報ばかりをかき集めていてそれぞれがつながっていないので今回ご指摘いただいたことを忘れずにやっていきます。 ほんとうにありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問