- - PR -
VB.NETで検索結果の有無によって処理を分ける方法
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-06-19 13:36
はじめまして。nariと申します。
超初心者ゆえ、何か抜けている点がありましたらご指摘いただきますと幸いです。 また、コードが含まれますので、長文となりますこと、ご容赦ください。 現在、ASPX ファイル上のあるテキストボックスに入っている文字列を、SQLサーバーのプライマリキーの項目で検索し、検索結果の有無によって処理を分ける、といったプログラムを作成していますが、SQL Server からの応答をうまく取得できず、悩んでいます。 開発言語:VB.NET(Web Matrix を使用) DBサーバ:SQL 2000 SP4 現在作成しているコードは以下です。 **コード***** dim conn as new sqlconnection() conn.ConnectionString = "data source=(local);Initial_ catalog=logs;Integrated Security=SSPI;" conn.open() dim cmd_select as New SqlCommand() cmd_select.CommandText = "select count(*) from Table_ where ID_A=@ID_A" dim ID_A0 as sqlparameter = cmd_Select.parameters.add("@ID_A",_ system.data.sqldbtype.varchar, 15) ID_A0.value = ID_A.text dim count as sqldatareader = cmd_select.ExecuteReader() conn.close() If count = 1 Then 処理1 Else 処理2 End If これをコンパイルすると、以下のようなエラーが表示されます。 **エラー***** error BC30452: 演算子 '=' は、型 'System.Data.SqlClient.SqlDataReader' および 'Integer' に対して定義されていません。 If count = 1 Then 何せ開発自体は初めてですので、このあたり(dim count as sqldatareader = cmd_select.ExecuteReader())を修正すべきなのかな、とは思うのですが、 どのように直したらよいか、2日ほど悩んでも解消できません。 何かご参考情報だけでもいただけますと幸いです。 お手数をおかけしますが、よろしくお願いいたします。 _________________ | ||||||||
|
投稿日時: 2006-06-19 13:49
型を意識しましょう。 count は何型で定義していますか? そして、右辺の 1 は何型になると思いますか? # Count だけが取りたいのであれば、ExecuteScalar メソッドを使った方が良いでしょう。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2006-06-19 13:51
If count.HasRows = True Then
SqlDataReaderにcountって名前は微妙ですけど。。。 | ||||||||
|
投稿日時: 2006-06-19 13:51
count の型の問題だと思います。 count を integer 型にして、キャストすれば宜しいかと思います。 | ||||||||
|
投稿日時: 2006-06-19 14:02
SELECT文がCount(*)だったんですね_| ̄|○
ExecuteScalar()メソッドを使用してください。 | ||||||||
|
投稿日時: 2006-06-19 14:11
DataReader 型自体とは互換性がないので、無理ですよ... orz
みたいです。 スレッド タイトルだけを見ていると、HasRows が、適切なんでしょうけどね。 (実は、私も burton999 さんと同じことを書いて消しましたw) _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2006-06-19 14:32
じゃんぬねっとさん、burton999さん、R・田中一郎さん
早速のアドバイスありがとうございます! アドバイスを元に、以下のように修正して、 やりたいことができるようになりました。 本当にありがとうございました! 型、という定義は理解できていたのですが、 クラス?(sqldetareader とか)で指定したものについて、 どんな型になるのかよく理解していませんでした。 もっと勉強をしたいと思います。 dim conn as new sqlconnection() conn.ConnectionString = "data source=(local);Initial_ catalog=logs;Integrated Security=SSPI;" conn.open() dim cmd_select as New SqlCommand() cmd_select.CommandText = "select count(*) from Table_ where ID_A=@ID_A" dim ID_A0 as sqlparameter = cmd_Select.parameters.add("@ID_A",_ system.data.sqldbtype.varchar, 15) ID_A0.value = ID_A.text dim res1 as sqldatareader = cmd_select.ExecuteReader() conn.close() If res1.HasRowshas = True Then 処理1 Else 処理2 End If | ||||||||
|
投稿日時: 2006-06-19 16:42
本当にOKですか?
コンパイルエラーがなくなっただけなのでは? 「SELECT COUNT(*)」は必ず行を返したと思うのですが…。 # 例外発生以外で。 ということは必ず処理1が実行されます。 因みに、MSDN(オンライン)のExecuteScalarメソッドのコード例に スレ主さんがやりたいことがほぼそのまま載ってます。 # COUNTを取得する方法です。 |