2012-05-09 6 views
1

vbのアクセスデータベースから取得できません。ここでは、問題を指して私のコードは次のとおりです。数値の比較で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)` 

私がここに持っている問題は、間の比較が? iはコンボボックスcyrNoteから取得してみた値であるConvert.ToInt32(cyrNote.SelectedItem.Trim)のプレースホルダですcrop_year =?であるように私には思えますConvert.ToInt32()を使用して整数に変換し、データベースの整数として定義されているデータベース値crop_yearと比較することができます。しかし、ここでの問題はselectがnullを返すことです。私は、プレースホルダ?を "2011"のような既知の値に置き換えようとしました。値が返されました。これは、私の比較crop_year=Convert.ToInt32(cyrNote.SelectedItem.Trim)が負であることを意味しますが、私は何か肯定的なものを期待しています。私は整数に変換する方法についてgoogleを試みました、そして、それは私が得ることができる最高です。誰かがこの変換がどうやってうまくやっていいのか、言い換えれば私のコードで何が問題になるのか教えてくれますか?

+1

のいずれかを使用する必要がありますか?それが2011を示すならば、すべてうまくいくはずです。 –

+0

メッセージボックスには、日付変数 '00:00:00'のデフォルト値が表示されますが、' 09/05/2012'のようなものが返されるはずです。これはおそらく、データが読み取られていないことを意味します – ken

+0

私はこれを意味しました:* MessageBox.Show(cyrNote.SelectedItem.Trim)* –

答えて

0

?@ccyに置き換えてください。名前付きパラメータまたは序数パラメータのどちらかを使用する必要がありますが、SQLテキストには序数が必要です。変数注入には...

+0

いいえ、アクセス利用ですか?パラメータプレースホルダの場合アクセスには名前付きパラメータはありません。 – gbianchi

0

名前付きパラメータがないため、送信時に名前を削除してください。

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

はすべきです。また

、あなたは、使用するコードを変更することができた場合:あなたはドント

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

はあなたがアクセスを使用している時に何も指定する必要があります。

1

私は問題が名前付きパラメータとは関係がないと思います。むしろ、SelectedItemはオブジェクト型です。あなたは*のMessageBox.Showをするときのコメントを外し、ディスプレイ*何(あなたのコンボボックスの実装に依存する)働き方の

cyrNote.SelectedText 

または

cyrNote.Text 

+0

これを試しましたが、まだ進歩はありません – ken

関連する問題