0

我正在尝试使用 SQL 查询检索表中的最后一个 ID,然后将结果与 TextBox 值(它是一个字符串)一起附加:

Dim searchforID = New OleDbCommand("select ID from [table1] where ID = (select max(id) from [table1])", con)
Dim variable1 = searchforID + TextBox1.Text

但它抛出了这个错误:

编译器错误消息:BC30452:未为类型“System.Data.OleDb.OleDbCommand”和“String”定义运算符“+”。


试图修复它

-- 所以我尝试像这样转换返回的记录 ID:

Dim variable1 = Convert.ToString(searchforID) + TextBox1.Text

现在没有错误但不幸的是返回的结果是“System.Data.OleDb.OleDb”+文本框值,例如:
System.Data.OleDb.OleDbtest

-- 我也想过将返回的记录 ID 转换为整数会引发错误:

异常详细信息:System.InvalidCastException:无法将“System.Data.OleDb.OleDbCommand”类型的对象转换为“System.IConvertible”类型。

那么为什么检索最后一条记录 ID 会失败呢?我的 SQL 查询可能是假的吗?

谢谢你。


如果有人发现它有用,那么直接解决问题:

Dim searchforID = New OleDbCommand("select MAX(ID) from [table1]", con)
Dim variable1 = searchforID.ExecuteScalar() & TextBox1.Text

下面的答案和评论也有有用的信息。

4

2 回答 2

3
Dim variable1 = searchforID.ExecuteScalar() & TextBox1.Text

searchforID 是 ICommand,不是值,如果要得到结果,需要执行命令并得到结果。ExecuteScalar 从查询返回第一行的第一个单元格值

于 2013-03-06T10:30:23.437 回答
1
Dim cmd = New OleDbCommand("select MAX(ID) from [table1]", con)
Dim variable1 = cmd.ExecuteScalar().ToString() & TextBox1.Text

首先,如果你有命令,你应该执行命令。有几种方法可以执行 a DbCommand,具体取决于命令的类型。

二、想要最大id,直接去查询最大!嵌套子查询是多余的。

第三,&用于连接字符串比+. 请参阅此处了解更多信息。

于 2013-03-06T10:31:23.083 回答