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

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

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

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

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

MVC

MVC(Model View Controller)は、オブジェクト指向プログラミングにおけるモデル・ビュー・コントローラーの総称であり、ソフトフェア開発で使われている構築パターンとしても呼ばれます。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

Q&A

解決済

1回答

987閲覧

MVC String.IsNullOrEmptyを用いたSQL文

tjaxgjj

総合スコア12

C#

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

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

MVC

MVC(Model View Controller)は、オブジェクト指向プログラミングにおけるモデル・ビュー・コントローラーの総称であり、ソフトフェア開発で使われている構築パターンとしても呼ばれます。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

0グッド

0クリップ

投稿2022/09/22 07:42

前提

mvcを用いて、データベースに接続し、一覧画面と検索機能の追加をしています。

実現したいこと

テキストボックスとプルダウンボックスがあり、それぞれmodel.a model.bです。
model.aには名前カラム(Name)の検索、model.bには性別(gender)のカラムの検索機能を追加したいです。

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

現在はmodel.aのテキストボックスからNameカラムの検索は出来ます。

if (String.IsNullOrEmpty(model.a)) { //一覧表示 command.CommandText = "SELECT * FROM Syain"; } else {//aから名前を取得 command.CommandText = "SELECT * FROM Syain WHERE Name LIKE '%" + model.a + "%'"; }

'%" + model.a + "%'"の部分は実際にはパラメータを利用しておりますが、
分かりやすくするために省略しています。

該当のソースコード

上記のソースコードにmodel.bも加えた検索機能を追加したいです。
①テキストボックス、プルダウンボックスともにnullか空欄の時
一覧画面を表示(SELECT * FROM Syain)

②テキストボックスに文字が入っていて、プルダウンボックスはnullか空白の時
テキストボックスの内容で検索する(SELECT * FROM Syain WHERE Name LIKE '%" + model.a + "%'")

③テキストボックスはnullか空白で、プルダウンボックスには選択リストから選択されている時
プルダウンボックスの内容で検索する(SELECT * FROM Syain WHERE Gender LIKE '%" + model.b + "%'" )

④テキストボックスにもプルダウンボックスにも文字が入っていて、選択リストから選択されている時
どちらにも満たしているものが検索される(②と③を&&でつなぐ?)

Syain.model

public string a { get; set; } public List<BihinDB> aList { get; set; } public string b { get; set; } public List<SelectListItem> bList { get; set; }

index.cshtml

@using (Html.BeginForm()) { //テキストボックス @Html.TextBoxFor(model => model.a) //ドロップダウンリスト @Html.DropDownListFor( model => model.b, Model.bList, "未選択") //検索ボタン <input type="submit" value="検索" />

試したこと

String.IsNullOrEmpty(model.a)
のmodel.aの後にmodel.bを追加してみましたが、IsNullOrEmptyの部分がエラーになり、引数2を指定するメソッド”IsNullOrEmpty”オーバーロードはありませんと表示されます。

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

ASP.NET MVC 
Windows 10 Pro,
Visual Studio2022 Version 17.3.2
.NET framework 4.7.2

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2022/09/22 08:00

なぜ Entity Framework を使わないのですか? つい最近あなたの質問と非常に似た質問があったのですが同一人物ですか? https://teratail.com/questions/iuigiyod3mzyma
tjaxgjj

2022/09/22 08:09

Entity Frameworkについて調べてみます! URLの方とは面識ないです、、><
退会済みユーザー

退会済みユーザー

2022/09/22 08:34

> URLの方とは面識ないです、、 では同じ研修の課題でしょうか? で、何がわかれば良いのでしょう? String.IsNullOrEmpty の使い方だけが分かればあとは自分で解決できるということでいいのですか?
KOZ6.0

2022/09/22 11:16

エラーについてはメッセージのとおりで、そんな使い方はできません。 ④ については、いったん C# から離れ、どんな SQL を書けばいいのか考えてみるといいです。 SQL を書くことができたら C# でどう実現するか考えてください。
tjaxgjj

2022/09/22 15:13

SurferOnWww様 >String.IsNullOrEmpty の使い方だけが分かればあとは自分で解決できるということでいいのですか? ④のselect文同士を繋げる?処理とString.IsNullOrEmptyの使い方が分かれば、なんとかできるかなと思います。 EntityFlameworkについては調査中です。
tjaxgjj

2022/09/22 15:15

KOZ6.0様 ④については②と③の処理を繋げたい?のですが、一文で表すことはできるのでしょうか? まずはSQL文を考えてみようと思います。
m.ts10806

2022/09/22 19:21 編集

SQLといってもアプリケーション側からしたら文字列なので、 WHERE句部分のみ動的に組み立てればいいのではと。 例として 「そこにいる人に対して1人ずつ”こんにちは”と挨拶を出力する。だれもいなければ”こんにちは”のみ出力する」プログラムで 誰もいない ->こんにちは Aさんがいる -> こんにちは Aさん AさんとBさんがいる -> こんにちは Aさん と Bさん これと同じです。 同じ部分「こんにちは」は共通なので毎回引っ付ける必要はなく あとは動的。 文字列配列と配列の連結をすればできそうですよね。
退会済みユーザー

退会済みユーザー

2022/09/22 21:44

> EntityFlameworkについては調査中です。 そこをまず決めてください。ちなみに、ASP.NET MVC では Entity Framework を利用すべきです。Visual Studio のデザイナがそれを使うようにできているから。
tjaxgjj

2022/09/23 08:21

m.ts10806様 回答ありがとうございます。 WHERE句の組み立ても考えてみます!
guest

回答1

0

ベストアンサー

EntityFlameworkについては調査中です。

ASP.NET MVC では Entity Framework を利用すべきです。Visual Studio のデザイナがそれを使うようにできているし、参考になるドキュメント類もほとんどすべて Entity Framework ベースだから。

なので、以下の Microsoft のチュートリアルのように Entity Framework を使ってやりましょう。

ASP.NET MVC アプリケーションで Entity Framework を使用して並べ替え、フィルター処理、ページングを追加する
https://learn.microsoft.com/ja-jp/aspnet/mvc/overview/getting-started/getting-started-with-ef-using-mvc/sorting-filtering-and-paging-with-the-entity-framework-in-an-asp-net-mvc-application

その中の「Index メソッドにフィルター機能を追加する」のセクションを見てください。以下にチュートリアルから検索に関係するコードを抜粋します。

C#

1public ViewResult Index(string sortOrder, string searchString) 2{ 3 // ・・・中略1・・・ 4 var students = from s in db.Students select s; 5 6 if (!String.IsNullOrEmpty(searchString)) 7 { 8 students = students.Where(s => s.LastName.Contains(searchString) 9 || s.FirstMidName.Contains(searchString)); 10 } 11 12 // ・・・中略2・・・ 13 14 return View(students.ToList()); 15}

ユーザーがテキストボックスに入力し[検索]ボタンをクリックするとアクションメソッド Index の引数 searchString にテキストボックス入力が送信されてきます。ちなみに、未入力の場合は "" が送信されてきます

ユーザー入力を String.IsNullOrEmpty でチェックし、入力がある場合はそれであいまい検索ができるようなコードを追加しています。上の例では Where 以下のコードがそれです。

質問者さんのケースではテキストボックスに加えてドロップダウンリストを追加し、ドロップダウンリストの選択結果も検索条件に加えたいということですが、その場合はアクションメソッド Index の引数にもう一つ引数を追加してドロップダウンリストの選択結果を受け取れるようにし、上のコメント「// ・・・中略2・・・」のところに検索条件のコードを追加します。

例えば追加した引数が string dropDownListItem で、検索対象が xxxxxx とすると、「// ・・・中略2・・・」のところに追加するコードは以下のようにします。

C#

1if (!String.IsNullOrEmpty(dropDownListItem)) 2{ 3 students = students.Where(s => s.xxxxxx == dropDownListItem); 4}

質問者さんが考えているような、テキストボックス入力とドロップダウンリスト選択結果に応じて複数の SELECT クエリを作って、ADO.NET + SqlClient でゴリゴリコードを書いて、処理を分けて SELECT クエリを使い分けるなんてことはしないで済みます。

投稿2022/09/23 01:26

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

tjaxgjj

2022/09/23 08:17

ありがとうございます! Entity Frameworkを使用して試してみたら思った通りに検索できました!
tjaxgjj

2022/09/26 01:50

度々失礼いたします。 >テキストボックス入力とドロップダウンリスト選択結果に応じて複数の SELECT クエリを作って、ADO.NET >+ SqlClient でゴリゴリコードを書いて、処理を分けて SELECT クエリを使い分けるなんてことはしないで済>みます。 上記の方法でかくとなるとどうなりますか? この課題はEntittyframeworkを使って解決しましたが、SELECT文でかいたらどうなるか気になりました。 ここまでSELECT文を使ってきたので、SQLの検索や出力の時などにも使えるかと思い、聞いた次第です! ただ気になっただけですので、急ぎではありません。パスしていただいても結構です。 EntityFrameworkはとても便利で、検索すれば記事も多く、これから勉強して使おうと思っています!
退会済みユーザー

退会済みユーザー

2022/09/26 02:13

> SELECT文でかいたらどうなるか気になりました。 そういうのは便利なツールがあるのに使わない(例えて言うなら Visual Studio が使えるのにメモ帳でアプリを作るようなもの)ということで、何の意味もないと思います。 勉強のためとかでどうしても知りたければ、まずは自分で考えたうえで、どうしてもわからないところを、新たに別スレッドを立てて質問してください。
tjaxgjj

2022/09/26 02:40

なるほど、例えが分かりやすかったので納得しました。 そもそも使う場面はほぼ皆無なんですね。 それならEntityFrameを勉強した方が今後の為になりそうなので、そちらを優先したいと思います! 改めて分かりやすい回答をありがとうございました!
退会済みユーザー

退会済みユーザー

2022/09/26 03:34

> そもそも使う場面はほぼ皆無なんですね。 ASP.NET MVC ではということですので、そこのところは誤解なきようお願いします。旧来の ASP.NET Web Forms アプリなどでは SQL 文を書いてそれを ADO.NET 経由で使うのが普通です。 SQL 文を書く、ADO.NET + SqlClient でそれを使ってコードを書くということは、基本的な知識として必要で、時間があれば学んでおくべきと思います。
tjaxgjj

2022/09/26 04:02

詳しくありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問