C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.30008 の関連記事表示

<< 0 >>
■30008  ExecuteReader()について
□投稿者/ 彩 -(2008/12/17(Wed) 13:56:40)

    分類:[VB.NET/VB2005 以降] 

    こんにちは、彩といいます。

    開発環境 WindowsXP
    使用言語 Microsoft Visual Studio 2005 Visual Basic

    デバック開始時の警告を解決できないで困っています。
    何かちょっとしたことで止まっている気がして、ヒントみたいなことでも教えていただけるとうれしいです。


    vbプログラム

    Dim ConnectionString As String = "DSN=SAMPLE"
    Dim conn As New System.Data.Odbc.OdbcConnection(ConnectionString)
    SQL = "SELECT * FROM table_01 where id = '" + Me.id.Text + "'"

    Dim query As New System.Data.Odbc.OdbcCommand(SQL, conn)

    reader = query.ExecuteReader()

    While (reader.Read())

    Me.district.SelectedIndex = reader.Item("district") '1
    Me.prefectures.Text = reader.Item("prefectures") '2

    End While

    データベース、テーブル内容

    +-----+----------+-------------+
    | id| district | prefectures |
    +-----+----------+-------------+
    | 1| 関東| 東京都|
    +-----+----------+-------------+

    警告内容

    2のところでIndexOutOfRangeExceptionはハンドルされませんでした。
    prefectures

    警告される。

    イミディエイト ウィンドウ

    'System.IndexOutOfRangeException' の初回例外が System.Data.dll で発生しました。



    1、2を入れ替えると警告は発生しない。
    1の後にreader.Itemを使うとどのカラム内容でも同じような警告が表示される。

    この警告を解決する方法を教えていただきたいです。

    よろしくお願いします。
親記事 /過去ログ53より / 関連記事表示
削除チェック/

■30012  Re[1]: ExecuteReader()について
□投稿者/ カドルドエグ -(2008/12/17(Wed) 14:49:44)
    No30008 (彩 さん) に返信
    > 2のところでIndexOutOfRangeExceptionはハンドルされませんでした。
    > prefectures

    > イミディエイト ウィンドウ
    >
    > 'System.IndexOutOfRangeException' の初回例外が System.Data.dll で発生しました。

    この警告、というかエラーの詳細がこちらにあるのですが、

    MSDN:例外のトラブルシューティング : System.IndexOutOfRangeException
    http://msdn.microsoft.com/ja-jp/library/3zwz4dx3(VS.80).aspx

    そこにある例外の意味を見て、何か思い当たることがあれば………
記事No.30008 のレス /過去ログ53より / 関連記事表示
削除チェック/

■30022  Re[2]: ExecuteReader()について
□投稿者/ 彩 -(2008/12/17(Wed) 15:12:40)
    No30012 (カドルドエグ さん) に返信
    > ■No30008 (彩 さん) に返信
    >>2のところでIndexOutOfRangeExceptionはハンドルされませんでした。
    >>prefectures
    >
    >>イミディエイト ウィンドウ
    >>
    >>'System.IndexOutOfRangeException' の初回例外が System.Data.dll で発生しました。
    >
    > この警告、というかエラーの詳細がこちらにあるのですが、
    >
    > MSDN:例外のトラブルシューティング : System.IndexOutOfRangeException
    > http://msdn.microsoft.com/ja-jp/library/3zwz4dx3(VS.80).aspx
    >
    > そこにある例外の意味を見て、何か思い当たることがあれば………


    ありがとうございます。

    そのトラブルシューティングも質問をする前に参照してみたんですが。

    データベースのテーブルにはprefecturesというカラムは存在しているので列名の間違いではないのは確認しています。

    Me.district.SelectedIndex = reader.Item("district") '1
    Me.prefectures.Text = reader.Item("prefectures") '2

    なぜ1と2を入れ替えると解決してしまうのかがわからなくて、、1の記述に問題があるのかなとは思っているんですが
    解決につながるものがみつからなくて
記事No.30008 のレス /過去ログ53より / 関連記事表示
削除チェック/

■30015  Re[1]: ExecuteReader()について
□投稿者/ たくボン -(2008/12/17(Wed) 14:52:35)
    2008/12/17(Wed) 14:53:40 編集(投稿者)

    No30008 (彩 さん) に返信
    > reader = query.ExecuteReader()
    その前に、readerって宣言してる?
記事No.30008 のレス /過去ログ53より / 関連記事表示
削除チェック/

■30016  Re[2]: ExecuteReader()について
□投稿者/ すがり -(2008/12/17(Wed) 14:55:53)
    Me.district.SelectedIndex = reader.Item("district") '1
    Me.prefectures.Text = reader.Item("prefectures") '2

    ータベース、テーブル内容

    +-----+----------+-------------+
    | id| district | prefectures |
    +-----+----------+-------------+
    | 1| 関東| 東京都|
    +-----+----------+-------------+

    どうでもいいですけど、SelectedIndexに「関東」って設定するんですか?
記事No.30008 のレス /過去ログ53より / 関連記事表示
削除チェック/

■30019  Re[3]: ExecuteReader()について
□投稿者/ 彩 -(2008/12/17(Wed) 15:03:22)
    No30016 (すがり さん) に返信
    > Me.district.SelectedIndex = reader.Item("district") '1
    > Me.prefectures.Text = reader.Item("prefectures") '2
    >
    > ータベース、テーブル内容
    >
    > +-----+----------+-------------+
    > | id| district | prefectures |
    > +-----+----------+-------------+
    > | 1| 関東| 東京都|
    > +-----+----------+-------------+
    >
    > どうでもいいですけど、SelectedIndexに「関東」って設定するんですか?

    本当はdistrictという名前のコンボボックスのコレクションにある「関東」を初期表示?させようとしているのですが
    まずはコレクション内のものではなくデータベースから検索した値を表示しようかと思って上記のように書きました。
    その場合

    Me.district.Text = reader.Item("district")が正しい書き方なのでしょうか?
    こうした場合でも同じ警告が表示されてしまいます。


記事No.30008 のレス /過去ログ53より / 関連記事表示
削除チェック/

■30025  Re[4]: ExecuteReader()について
□投稿者/ たくボン -(2008/12/17(Wed) 15:16:30)
    2008/12/17(Wed) 15:19:43 編集(投稿者)

    No30019 (彩 さん) に返信
    > ■No30016 (すがり さん) に返信
    > 本当はdistrictという名前のコンボボックスのコレクションにある「関東」を初期表示?させようとしているのですが
    > まずはコレクション内のものではなくデータベースから検索した値を表示しようかと思って上記のように書きました。

    まず確認することは、
    1.connのOpen()はしてるのか?
    2.DSN, SQL文は正しいか?
    3.reader.Item("district")のような列名ではなく、reader.Item(0)のような添字でも同様のIndexOutOfRangeExceptionが発生するか?

    ここらを調べれば解決すると思うので頑張ってください。
記事No.30008 のレス /過去ログ53より / 関連記事表示
削除チェック/

■30029  Re[5]: ExecuteReader()について
□投稿者/ 彩 -(2008/12/17(Wed) 15:32:00)
    No30025 (たくボン さん) に返信
    > 2008/12/17(Wed) 15:19:43 編集(投稿者)

    > まず確認することは、
    > 1.connのOpen()はしてるのか?

    はい、conn.Open()と記述しています。書き忘れていました。すみません。

    > 2.DSN, SQL文は正しいか?

    はい、DSNは正しいです、他のテーブルを検索するSQLを実行したときエラーは発生しませんでした。
    SQL文はreader.Read()を実行する前にテキストボックスにSQL文を表示させてそれをコピーしてプロンプト上で実行すると望んだデータの検索は出来ました。

    > 3.reader.Item("district")のような列名ではなく、reader.Item(0)のような添字でも同様のIndexOutOfRangeExceptionが発生するか?

    reader.Item(0)とすると
    InvalidOperationExceptionが発生し、行および列にデータが存在しません。と表示されます。
    SQL文が正しければ発生しないエラーだと思うのですが、SQL文は正しいのでなぜエラーなのか探しています。
記事No.30008 のレス /過去ログ53より / 関連記事表示
削除チェック/

■30042  Re[6]: ExecuteReader()について
□投稿者/ たくボン -(2008/12/17(Wed) 16:38:16)
    No30029 (彩 さん) に返信
    > reader.Item(0)とすると
    > InvalidOperationExceptionが発生し、行および列にデータが存在しません。と表示されます。
    > SQL文が正しければ発生しないエラーだと思うのですが、SQL文は正しいのでなぜエラーなのか探しています。

    これはデータが取得できていない可能性がありますね。
    DataAdapterを使ってCount調べてみるのが速いかも。
    ちなみに、DBは何でしょうか?
記事No.30008 のレス /過去ログ53より / 関連記事表示
削除チェック/

■30050  Re[7]: ExecuteReader()について
□投稿者/ 彩 -(2008/12/17(Wed) 16:51:15)
    No30042 (たくボン さん) に返信
    > ■No30029 (彩 さん) に返信
    >>reader.Item(0)とすると
    >>InvalidOperationExceptionが発生し、行および列にデータが存在しません。と表示されます。
    >>SQL文が正しければ発生しないエラーだと思うのですが、SQL文は正しいのでなぜエラーなのか探しています。
    >
    > ちなみに、DBは何でしょうか?

    データベースはMySQLです。

    > DataAdapterを使ってCount調べてみるのが速いかも。

    DataAdapterを使ったことがなく、やり方を探してCountを調べてみます。

    ありがとうございます。

    ExecuteNonQueryで影響を受けた行数を調べるのとは違うのでしょうか?
記事No.30008 のレス /過去ログ53より / 関連記事表示
削除チェック/

■30069  Re[8]: ExecuteReader()について
□投稿者/ たくボン -(2008/12/17(Wed) 17:45:48)
    No30050 (彩 さん) に返信
    > データベースはMySQLです。
    うーん、今手元にある環境でテストしてみたんですけど、こちらでは正常に取得できます。
    MySQL : 5.0.67-community-nt
    ODBC Driver : MySQL ODBC 3.51 Driver

    MySQLの文字セットと照合順序とかの設定は何にされていますか?
    あとこれはないと思いますが、idはシングルクォートで囲んでいるので文字列ですよね?
    そこら辺を知りたいので、一度WHERE句を外したSQLを投げてデータが取得できるか試してみては?

    > ExecuteNonQueryで影響を受けた行数を調べるのとは違うのでしょうか?
    ExecuteNonQueryとは違います。ExecuteNonQueryは結果セットを返却しない、 ExecuteQueryは前方向の結果セットを返却する呼び出しです。
記事No.30008 のレス /過去ログ53より / 関連記事表示
削除チェック/

■30072  Re[9]: ExecuteReader()について
□投稿者/ 彩 -(2008/12/17(Wed) 18:18:48)
    No30069 (たくボン さん) に返信
    > ■No30050 (彩 さん) に返信
    >>データベースはMySQLです。
    > うーん、今手元にある環境でテストしてみたんですけど、こちらでは正常に取得できます。
    > MySQL : 5.0.67-community-nt
    > ODBC Driver : MySQL ODBC 3.51 Driver
    >
    > MySQLの文字セットと照合順序とかの設定は何にされていますか?

    show table status from SAMPLEで調べたテーブルの
    Collationは「ujis_japanese_ci」でした、これのことでしょうか、、調べ方がちょっとわかっていません。

    > あとこれはないと思いますが、idはシングルクォートで囲んでいるので文字列ですよね?

    シングルクォートで囲っているんですがint型です、
    紛らわしい記述をしていまいすみません。

    > そこら辺を知りたいので、一度WHERE句を外したSQLを投げてデータが取得できるか試してみては?
    >

    > ExecuteNonQueryとは違います。ExecuteNonQueryは結果セットを返却しない、 ExecuteQueryは前方向の結果セットを返却する呼び出しです。
    >

    ここはちょっと読んで理解できていないので勉強します。

    解決には至っていないんですが、データを取得していないことだと思います。

    Me.district.SelectedIndex = reader.Item("district")
    を設定したあとにこのコンボボックスの値が変更されたら
    データベースから値を取り直す機能が動いているのかもしれないのでそれが原因な気がしています。
    変更されたらが画面上で操作だけじゃないことを見落としていました。
    私が記述した内容では気がつかないことでした、情報不足ですみません。

    いろんな解決への方法を教えていただきありがとうございます。
    今後参考にします。
    原因がわかったのであとは自分でやってみます。ありがとうございました。解決済みにしておきます。
記事No.30008 のレス /過去ログ53より / 関連記事表示
削除チェック/

■30036  Re[4]: ExecuteReader()について
□投稿者/ カドルドエグ -(2008/12/17(Wed) 15:58:00)
    No30019 (彩 さん) に返信
    > 本当はdistrictという名前のコンボボックスのコレクションにある「関東」を初期表示?させようとしているのですが
    > まずはコレクション内のものではなくデータベースから検索した値を表示しようかと思って上記のように書きました。
    
    コンボボックスの中身と表示用が違う場合の設定方法の1つにこんな感じのがあります。
    
    ※フォームにはコンボボックスとテキストボックスのみ
    
    Public Class Form1
    
        Private table As DataTable = New DataTable
    
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            'テストなので型無し:実際はDBから持ってきたテーブル(データ)
            GetData()
    
            Me.ComboBox1.DataSource = table
            Me.ComboBox1.ValueMember = "中身用"
            Me.ComboBox1.DisplayMember = "表示用"
    
            '初期表示の設定
            Me.ComboBox1.SelectedIndex = 1
        End Sub
    
        Private Sub GetData()
            table.Columns.Add("表示用")
            table.Columns.Add("中身用")
    
            table.Rows.Add("東北", "01")
            table.Rows.Add("関東", "02")
            table.Rows.Add("近畿", "03")
        End Sub
    
        '中身の確認用
        Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
    
            If Me.ComboBox1.SelectedIndex > -1 Then
                Me.TextBox1.Text = Me.ComboBox1.SelectedValue.ToString()
            End If
    
        End Sub
    End Class
記事No.30008 のレス /過去ログ53より / 関連記事表示
削除チェック/

■30054  Re[5]: ExecuteReader()について
□投稿者/ 彩 -(2008/12/17(Wed) 16:57:40)
    No30036 (カドルドエグ さん) に返信
    > ■No30019 (彩 さん) に返信
    >>本当はdistrictという名前のコンボボックスのコレクションにある「関東」を初期表示?させようとしているのですが
    >>まずはコレクション内のものではなくデータベースから検索した値を表示しようかと思って上記のように書きました。
    >
    > コンボボックスの中身と表示用が違う場合の設定方法の1つにこんな感じのがあります。
    >

    わざわざサンプルをありがとうございます、今後の参考に使いたいと思います。
    実際にやってみるととても便利そうに感じました。

    コンボボックスの、ValueMember、DisplayMember
    の存在はわかっていたんですが、使ったことがなく、使い方を教えていただいてありがとうございます。
記事No.30008 のレス /過去ログ53より / 関連記事表示
削除チェック/

■30017  Re[2]: ExecuteReader()について
□投稿者/ 彩 -(2008/12/17(Wed) 14:57:21)
    No30015 (たくボン さん) に返信
    > 2008/12/17(Wed) 14:53:40 編集(投稿者)
    >
    > ■No30008 (彩 さん) に返信
    >>reader = query.ExecuteReader()
    > その前に、readerって宣言してる?

    ありがとうございます。

    上記に書き忘れていました

    Dim reader As Odbc.OdbcDataReader

    と宣言しています。すみません。
記事No.30008 のレス /過去ログ53より / 関連記事表示
削除チェック/

■30024  Re[3]: ExecuteReader()について
□投稿者/ すがり -(2008/12/17(Wed) 15:16:03)
記事No.30008 のレス /過去ログ53より / 関連記事表示
削除チェック/

■30026  Re[4]: ExecuteReader()について
□投稿者/ たくボン -(2008/12/17(Wed) 15:21:14)
    No30024 (すがり さん) に返信
    > ↑でもいわれていますけど、警告ではなくエラーですよ。
    >
    > SelectedIndexに「関東」設定しても当然エラーになりますよ。数値に文字列入れるんですから・・・
    > http://msdn.microsoft.com/ja-jp/library/system.windows.forms.combobox.selectedindex(VS.80).aspx

    ごめんなさい。

    Me.district.SelectedIndex

    こっちのIndexOutOfRangeExceptionの方かwww
    すっかり勘違いしてました(笑)
記事No.30008 のレス /過去ログ53より / 関連記事表示
削除チェック/

■30035  Re[5]: ExecuteReader()について
□投稿者/ 彩 -(2008/12/17(Wed) 15:54:35)
    No30026 (たくボン さん) に返信
    > ■No30024 (すがり さん) に返信
    >>↑でもいわれていますけど、警告ではなくエラーですよ。
    >>
    >>SelectedIndexに「関東」設定しても当然エラーになりますよ。数値に文字列入れるんですから・・・
    >>http://msdn.microsoft.com/ja-jp/library/system.windows.forms.combobox.selectedindex(VS.80).aspx
    >
    > ごめんなさい。
    >
    > Me.district.SelectedIndex
    >
    > こっちのIndexOutOfRangeExceptionの方かwww
    > すっかり勘違いしてました(笑)

    すみません、変更しました。

    テーブル

    +-----+----------+-------------+
    | id| district | prefectures |
    +-----+----------+-------------+
    | 1| 0| 東京都|
    +-----+----------+-------------+

    districtのItems
    Me.district.Items(0) = 関東

    Me.district.SelectedIndex = reader.Item("district") '1

    とすると「関東」が初期選択されているようにしましたが、同じエラーが発生してしまいます。
記事No.30008 のレス /過去ログ53より / 関連記事表示
削除チェック/

■30074  Re[6]: ExecuteReader()について
□投稿者/ 彩 -(2008/12/17(Wed) 18:20:12)
    解決済みにします。
記事No.30008 のレス / END /過去ログ53より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -