@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

検索結果について

1
投稿者投稿内容
さつき
会議室デビュー日: 2006/08/23
投稿数: 4
投稿日時: 2006-08-29 00:09
こんばんは。さつきです。
よろしくお願いします。

asp.netを使用しており、
テキストボックスが3つあり(ID名はTextBox1、TextBox2、TextBox3とします)ボタンをクリックすると
その3つの入力内容からDB(SQLSERVER2000)にアクセスしselectで出力件数を取得したいと思っているのですが
思う様に考えている結果が返ってこなく困っております。またテキストボックスはすべてLikeを使用して
ワイルドカードを実現したいと思っています。

DBの情報として
 @a列:1234、 b列:123456、c列:123456
Aa列:12345678、b列:598、c列:123456789
Ba列:123、b列:598、c列:2545444
が入っているとします

また、
aの内容はTextBox1、bの内容はTextBox2、cの内容はTextBox3
に格納するものだとします。

この様な状況で
@TextBox1だけに123を入力した場合、カウント結果は2を返す
ATextBox1に123、TextBox2に59と入力した場合、カウント結果は1を返す
BTextBox1に123、TextBox2に59と入力した場合、カウント結果は1を返す
CTextBox1に123、TextBox2に59、TextBox3に254と入力した場合カウント結果は1を返す
にしたく下記の様なソースを作っているのですがselect文がおかしいせいかうまく結果が帰ってこなくて困っております。
///////////////////////////////////////////////////////////////////////////////////////////////////////

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
Session("a") = TextBox1.Text
Session("b") = TextBox2.Text
Session("c") = TextBox3.Text

Dim qweStr As String = 接続文字列
Dim qweDb As SqlConnection = New SqlConnection(qweStr)
Dim qwe As New SqlCommand _
("SELECT count (*) from テーブル名 WHERE a LIKE @a or b Like @b or c Like @c", qweDb)
qwe.Parameters.AddWithValue("@a", Session("ORGEdit"))
qwe.Parameters.AddWithValue("@b", Session("USEEdit"))
qwe.Parameters.AddWithValue("@c", Session("MBGRPEdit"))

qweDb.Open()
Dim qweDr As Integer = CType(qweCom.ExecuteScalar, Integer)
qweDbDb.Close()
///////////////////////////////////////////////////////////////////////////////////////////////////////

何卒アドバイスよろしくお願いします。
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2006-08-29 00:33
引用:

DBの情報として
 @a列:1234、 b列:123456、c列:123456
Aa列:12345678、b列:598、c列:123456789
Ba列:123、b列:598、c列:2545444
が入っているとします

また、
aの内容はTextBox1、bの内容はTextBox2、cの内容はTextBox3
に格納するものだとします。

この様な状況で
@TextBox1だけに123を入力した場合、カウント結果は2を返す
ATextBox1に123、TextBox2に59と入力した場合、カウント結果は1を返す
BTextBox1に123、TextBox2に59と入力した場合、カウント結果は1を返す
CTextBox1に123、TextBox2に59、TextBox3に254と入力した場合カウント結果は1を返す
にしたく下記の様なソースを作っているのですがselect文がおかしいせいかうまく結果が帰ってこなくて困っております。


の、(1)( (2)と(3)は書き間違い? )が何故そうなるのかが少し理解できません。(マル数字は機種依存文字なので括弧にします)

(1)は、なぜカウント2ですか?「ワイルドカードにしたい」という文面から、カウント3だと思ったのですが。
「ワイルドカードの実現」はどこで行っていますか?提示されているコードにはそれらしいのが見当たらないようです。

「%」が0個以上の文字、「_」が任意の1文字等になります。
_________________
囚人のジレンマな日々
burton999
ぬし
会議室デビュー日: 2003/10/06
投稿数: 898
お住まい・勤務地: 東京
投稿日時: 2006-08-29 00:37
http://www.wakhok.ac.jp/DB/subsection2.4.3.5.html

#1〜4の条件がおかしいですけど。。。
さつき
会議室デビュー日: 2006/08/23
投稿数: 4
投稿日時: 2006-08-29 01:17
囚人様、burton999様さっそくのお返答ありがとうございます。

引用:
--------------------------------------------------------------------------------
(1)は、なぜカウント2ですか?「ワイルドカードにしたい」という文面から、カウント3だと思ったのですが。
「ワイルドカードの実現」はどこで行っていますか?提示されているコードにはそれらしいのが見当たらないようです。
--------------------------------------------------------------------------------

すいません。記述ミスです。
下記の様になります。
///////////////////////////////////////////////////////////////////////////////////////////////////////

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
Session("a") = TextBox1.Text
Session("b") = TextBox2.Text
Session("c") = TextBox3.Text

Dim qweStr As String = 接続文字列
Dim qweDb As SqlConnection = New SqlConnection(qweStr)
Dim qwe As New SqlCommand _
("SELECT count (*) from テーブル名 WHERE a LIKE @a or b Like @b or c Like @c", qweDb)
qwe.Parameters.AddWithValue("@a", Session("ORGEdit") & "%")
qwe.Parameters.AddWithValue("@b", Session("USEEdit") & "%")
qwe.Parameters.AddWithValue("@c", Session("MBGRPEdit") & "%")

qweDb.Open()
Dim qweDr As Integer = CType(qweCom.ExecuteScalar, Integer)
qweDbDb.Close()
///////////////////////////////////////////////////////////////////////////////////////////////////////

引用:
--------------------------------------------------------------------------------
の、(1)( (2)と(3)は書き間違い? )が何故そうなるのかが少し理解できません。(マル数字は機種依存文字なので括弧にします)
--------------------------------------------------------------------------------
すいません。書き間違えです。

////////////////////////////////////////////////////////////////////////////////////
@TextBox1だけに123を入力した場合、カウント結果は3を返す
ATextBox1に123、TextBox2に59と入力した場合、カウント結果は2を返す
BTextBox1に123、TextBox2に59、TextBox3に254と入力した場合カウント結果は1を返す
////////////////////////////////////////////////////////////////////////////////////
この状況で @、Bは希望通りの結果なのですが、Aだけカウント3をかえしてしまいます。
NAL-6295
ぬし
会議室デビュー日: 2003/01/26
投稿数: 966
お住まい・勤務地: 東京
投稿日時: 2006-08-29 01:37
NAL-6295です。

orで結んでいるので、どの条件でも3件返ってくる気がしますが、
(3)だけ希望通りというのが不思議ですね。
全部ANDなら確かに希望通りの結果になりそうですが。
ちなみに、ワイルドカードにしたいというのは、前方一致の事だったんですね。
_________________
「伝える」とは「人に云う」と書く。
http://d.hatena.ne.jp/NAL-6295/
べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2006-08-29 02:39
引用:
qwe.Parameters.AddWithValue("@a", Session("ORGEdit") & "%")
qwe.Parameters.AddWithValue("@b", Session("USEEdit") & "%")
qwe.Parameters.AddWithValue("@c", Session("MBGRPEdit") & "%")

引用:
////////////////////////////////////////////////////////////////////////////////////
@TextBox1だけに123を入力した場合、カウント結果は3を返す
ATextBox1に123、TextBox2に59と入力した場合、カウント結果は2を返す
BTextBox1に123、TextBox2に59、TextBox3に254と入力した場合カウント結果は1を返す
////////////////////////////////////////////////////////////////////////////////////
この状況で @、Bは希望通りの結果なのですが、Aだけカウント3をかえしてしまいます。

2では、@cには "%"がわたるので全件返されるので、正しい動作だと思いますよ。
同じ理由で、1で、TextBox1だけに何を入力しても、カウント結果は3を返すと思います。

どういう条件にしたいのか、日本語で書いてみるといいと思います。

#セッション変数名もマチガイですよね?

[追記]
あれ、3でもカウント結果は3を返すような気がします。

[ メッセージ編集済み 編集者: べる 編集日時 2006-08-29 02:53 ]
1

スキルアップ/キャリアアップ(JOB@IT)