我无法从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)
是否定的,但我期待一些积极的东西。我试图谷歌如何转换为整数,这是我能得到的最好的。有人可以告诉我如何很好地完成转换,或者换句话说我的代码可能会出现什么问题?
答案 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));
使用访问时无需指定任何内容。