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

4

3 回答 3

1

我认为这个问题与命名参数无关。相反,SelectedItem是对象类型。你应该使用

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 回答