2012-05-09 41 views
1

我不能够从在VB我访问数据库中检索的比较来选择。这里是我的代码指向问题:无法从Access数据库在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 =?其中?Convert.ToInt32(cyrNote.SelectedItem.Trim)占位符这是一个值我从ComboBox cyrNote获取和尝试使用Convert.ToInt32()将其转换为整数,以便可以将其与数据库中定义为整数的数据库值crop_year进行比较。但这里的问题是select返回null。我尝试用“2011”等已知值替换占位符?,并返回一个值。这对我意味着我的比较crop_year=Convert.ToInt32(cyrNote.SelectedItem.Trim)是负面的,但我期望一些积极的东西。我试图谷歌如何转换为整数,这是最好的,我可以得到。有人可以告诉我这种转换如何完成,换句话说,我的代码可能会出现什么问题?

+1

什么是您的* MessageBox.Show *显示时未加注释?如果它显示2011年,那么一切都应该工作得很好。 –

+0

messagebox显示日期变量'00:00:00'的默认值,但它应该返回类似'09/05/2012'的东西。这可能意味着,没有被读取 – ken

+0

我的意思是这样一个数据:* MessageBox.Show(cyrNote.SelectedItem.Trim)* –

回答

0

尝试在SQL语句@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是对象类型。您应该使用

cyrNote.SelectedText 

cyrNote.Text 

取其工程(取决于您的组合框的实现)

+0

试过这个但仍然没有进展 – ken