无法通过比较数值从vb中的访问数据库中进行选择

时间:2012-05-09 13:53:58

标签: vb.net ms-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)的占位符,这是我从组合框cyrNote得到的值并尝试使用Convert.ToInt32()将其转换为整数,以便可以将其与数据库值crop_year进行比较,数据库值在数据库中定义为整数。这里的问题是select返回null。我尝试用像“2011”这样的已知值替换占位符?并返回一个值。这对我来说意味着我的比较crop_year=Convert.ToInt32(cyrNote.SelectedItem.Trim)是否定的,但我期待一些积极的东西。我试图谷歌如何转换为整数,这是我能得到的最好的。有人可以告诉我如何很好地完成转换,或者换句话说我的代码可能会出现什么问题?

3 个答案:

答案 0 :(得分:1)

我认为问题与命名参数无关。相反, SelectedItem 属于Object类型。你应该使用

cyrNote.SelectedText

cyrNote.Text

无论哪种方式(取决于您的组合框实现)

答案 1 :(得分:0)

尝试在SQL语句中用?替换@ccy。您需要使用命名参数或序数参数,但您的SQL文本需要序数,并且您的变量注入命名为...

答案 2 :(得分:0)

由于访问时没有命名参数,请尝试在发送时删除名称。

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

应该诀窍。

另外,如果可以,请更改要使用的代码:

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

使用访问时无需指定任何内容。