1

vbのアクセスデータベースから取得できません。問題を指摘する私のコードは次のとおりです。

`cmd.CommandText = "SELECT  distinct(brought_date) from brought_coffee  where crop_year =? order by brought_date"
        cmd.Parameters.Add("@ccy", OleDb.OleDbType.Integer).Value = Convert.ToInt32(cyrNote.SelectedItem.Trim)
        myData = cmd.ExecuteReader
        'MessageBox.Show(cyrNote.SelectedItem.Trim)

        While myData.Read()
            dte = myData(0)
            dtComb.Items.Add(dte)

        End While
        MessageBox.Show("dt1" & dte)`

私がここで抱えている問題は、コンボボックスから取得した値であるプレースホルダーがcrop_year =?どこにあるかということであり、次のように定義されているデータベース値と比較できるように、を使用して整数に変換しようとしているようです。データベース内の整数。ただし、ここでの問題は、selectがnullを返すことです。プレースホルダーを「2011」などの既知の値に置き換えようとしましたが、値が返されました。これは、私の比較が否定的であるにもかかわらず、何か肯定的なものを期待していることを意味します。私は整数に変換する方法をグーグルで検索しようとしましたが、それが私が得ることができる最高のものです。誰かがこの変換をうまく行う方法、言い換えれば私のコードの問題は何であるかを教えてもらえますか??Convert.ToInt32(cyrNote.SelectedItem.Trim)cyrNoteConvert.ToInt32()crop_year?crop_year=Convert.ToInt32(cyrNote.SelectedItem.Trim)

4

3 に答える 3

1

問題は名前付きパラメーターとは何の関係もないと思います。むしろ、SelectedItemは Object タイプです。どちらかを使用する必要があります

cyrNote.SelectedText

また

cyrNote.Text

どちらでも動作します (コンボ ボックスの実装によって異なります)。

于 2012-05-09T15:31:11.430 に答える
0

SQLステートメントでで置き換え?てみてください。@ccy名前付きパラメーターまたは序数パラメーターのいずれかを使用する必要がありますが、SQLテキストは序数を想定しており、変数インジェクションには名前が付けられています...

于 2012-05-09T14:39:02.727 に答える
0

アクセスには名前付きパラメーターがないため、送信するときに名前を削除してみてください。

cmd.Parameters.Add("", OleDb.OleDbType.Integer).Value = Convert.ToInt32(cyrNote.SelectedItem.Trim)

トリックする必要があります。

また、可能であれば、使用するコードを変更します。

cmd.Parameters.AddWithValue("", Convert.ToInt32(cyrNote.SelectedItem.Trim));

アクセスを使用する場合は、何も指定する必要はありません。

于 2012-05-09T14:53:36.720 に答える