🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

ASP.NET

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

Q&A

解決済

1回答

668閲覧

1つのテキストボックスで2つのフィールドを同時に検索する方法

Ecarlat

総合スコア6

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

ASP.NET

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

0グッド

0クリップ

投稿2019/11/09 02:52

編集2019/11/09 22:56

サンプルコードを組み合わせて、使用している全くの初心者です。
ASP.NETとAccess(2013)を使用して、Web上にデータを表示させています。
そこに絞込みの機能を追加させWebFormsを作成したいと思っています。

まず、AccessのQry_BusinessReportクエリーを呼び出し、そこにある[Customer_NameEng]、[Customer_NameLoc]、[Supply_Product]フィールドのデータを表示することはできています。
次に絞込み用の[TextBox1]と[DropDownList1]を配置し、[TextBox1]で[Customer_NameEng]を、[DropDownList1]で[Supply_Product]を曖昧検索(Likeを使って)、絞り込むこともできました。

ここからが質問なのですが、[TextBox1]に入力したキーワードで[Customer_NameEng]だけではなく、[Customer_NameLoc]も同時に曖昧検索させたいのです。
もともとAccess側には[Customer_NameEng]フィールドには英語でTOYOTA、[Customer_NameLoc]フィールドには日本語でトヨタなどが入力されています。[TextBox1]に"TOYOTA"あるいは"トヨタ"のどちらを入力しても、該当データを抽出できるようにしたいのです。
下記のように、Where句を"or"で繋いで、Parameterに[Customer_NameLoc]を追加しましたが、「1 つ以上の必要なパラメーターの値が設定されていません。」とのエラーで表示することができません。

どこを修正したら良いか、どなたかお教え願います。
<開発環境>Windows10、Acess2013、Expression web4.0 .NET Framework 4.8(レジストリーから確認)、ASP.NET 4.8.4042.0(エラーコード画面から確認)

以下、該当部分のコードです(素人で、いらないパラメータが入っており見にくいかもしれませんがご容赦願います)。

<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\inetpub\wwwroot\App_Data\Sales-Dep_WebList.mdb" ProviderName="System.Data.OleDb" SelectCommand="SELECT [Customer_NameEng], [Customer_NameLoc], [Supply_Product] FROM [Qry_BusinessReport] WHERE (([Customer_NameEng] LIKE '%' + ? + '%') AND ([Supply_Product] LIKE '%' + ? + '%')) or (([Customer_NameLoc] LIKE '%' + ? + '%') AND ([Supply_Product] LIKE '%' + ? + '%'))"> <SelectParameters> <asp:ControlParameter ControlID="TextBox1" DefaultValue="%" Name="Customer_NameEng" PropertyName="Text" Type="String" />        <asp:ControlParameter ControlID="TextBox1" DefaultValue="%" Name="Customer_NameLoc" PropertyName="Text" Type="String" /> <asp:ControlParameter ControlID="DropDownList1" DefaultValue="%" Name="Supply_Product" PropertyName="SelectedValue" Type="String" /> </SelectParameters> </asp:SqlDataSource>

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2019/11/09 05:27

コードは ``` と ``` で囲ってください。インデントされて見やすくなるので。その際、太文字にする ** は効かないので外してください。また、一行に長いコードを貼らないで、適宜改行を入れてください。 インデントされてないコードは質問者さんも読む気がしないのでは? 赤の他人の回答者・閲覧者はなおさらです。読んでもらえなければ話が始まらないのですから、読んでもらえる努力をしましょう。
退会済みユーザー

退会済みユーザー

2019/11/09 05:32 編集

何を作っているかを書いてください。ASP.NET と言っても Web Forms, MVC, Web Pages, Web API などいろいろあります。(コードを読めばわかるとは言わないでくださいね。あなたが質問の最初の一行目に書けばコードなど見なくて済むことなのですから) 開発環境を書いてください。Visual Studio, OS, .NET のバージョン、DB サーバーは何かとそのエディション・バージョンなどは最低書いてください。特に .NET のバージョンが重要。
Ecarlat

2019/11/09 14:56

先に投稿させていただいたのですが、一部情報を追加させていただきました。 ご指摘ありがとうございます。
退会済みユーザー

退会済みユーザー

2019/11/09 21:43

コードには適宜改行を入れることと、** は外すようお願いしたはずです。 Visual Studio のバージョンを書くようお願いしたはずです。 .NET のバージョン間違っていませんか? どこを見ているのでしょう?
Ecarlat

2019/11/09 22:57

使用条件、記載方法等を一部修正しました。 よろしくお願いします。
退会済みユーザー

退会済みユーザー

2019/11/10 01:45 編集

Visual Studio のバージョンが書いてないです。.NET のバージョンというのは、アプリで使う .NET のバージョンのことで、Visual Studio でプロジェクトを自動生成すると作成される web.config に <compilation debug="true" targetFramework="4.6.1"> のように設定されていると思いますが、その targetFramework です。 あと、コードの改行の話ですが、私の回答欄に書いてある程度にまで改行できます。質問のコードとどちらが読みやすいですか?
Ecarlat

2019/11/10 06:09

Visual Studioは使用していません。 Microsoft Expression web4.0のみで作業をしています。 コードの改行についてはご提示いただいた方が明らかに見やすいですね。 以後、参考にさせていただきます。
guest

回答1

0

ベストアンサー

Access のようにパラメータに ?(位置パラメーターマーカーと言います)を使う場合 ControlParameter を設定する順番と数が重要で、質問にある SELECT クエリ:

SELECT [Customer_NameEng], [Customer_NameLoc], [Supply_Product] FROM [Qry_BusinessReport] WHERE (([Customer_NameEng] LIKE '%' + ? + '%') AND ([Supply_Product] LIKE '%' + ? + '%')) or (([Customer_NameLoc] LIKE '%' + ? + '%') AND ([Supply_Product] LIKE '%' + ? + '%'))

・・・に出てくる ? の順番にその数(上の SELECT クエリでは 4 つ)設定する必要があります。

ControlParameter を以下のように設定し直してから試して、結果を連絡ください。

<asp:ControlParameter ControlID="TextBox1" DefaultValue="%" Name="Customer_NameEng" PropertyName="Text" Type="String" /> <asp:ControlParameter ControlID="DropDownList1" DefaultValue="%" Name="Supply_Product" PropertyName="SelectedValue" Type="String" /> <asp:ControlParameter ControlID="TextBox1" DefaultValue="%" Name="Customer_NameLoc" PropertyName="Text" Type="String" /> <asp:ControlParameter ControlID="DropDownList1" DefaultValue="%" Name="Supply_Product" PropertyName="SelectedValue" Type="String" />

ところで、DefaultValue="%" は何ですか? 意味がなさそうですけど。

投稿2019/11/10 01:11

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

Ecarlat

2019/11/10 06:07

記載する順番が重要だったのですね。 お教えいただいた順序で記載したところ、無事目的通りの絞込み結果が得られました。 なお、DefaultValue="%"については、参考にしたコードがそのようになっていたので そのまま使用しました。 ただ最初にWebページを開いた際に全データが表示されるはずなのですが、 DefaultValue="%"を削除すると、最初に開いた際に該当データなしと表示されます。 空欄で検索するにを防ぐために記載しているものと思います。
退会済みユーザー

退会済みユーザー

2019/11/10 06:10

> 記載する順番が重要だったのですね。 順番だけでなく数もです。 DefaultValue="%" の件は了解しました。 問題が解決したのであればこのスレッドはクローズ願います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問