请问为什么sql.executescalar 为 DBNull类型?

jh123 2003-12-09 01:36:36
Dim a As String
Dim b As String
If TextBox1.Text = "" Then
cnKS.Open()
sql.CommandText = "select max(工作组ID) from 工作组 where 工作组ID like '" & Me.ComboBox1.SelectedValue & "'&"
a = CType(sql.ExecuteScalar, String)
cnKS.Close()
以在代码在到: a = CType(sql.ExecuteScalar, String)时,提示:“不能强制把DBNull类型转换为string类型,我查了书了都正确,我真不知道为什么会这样?请各位大大帮忙,谢谢了
...全文
112 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
snakeyin 2003-12-09
  • 打赏
  • 举报
回复
同意樓上
带参数的情况下最好使用存储过程,这样把程序代码和数据代码分开,调试起来会方便许多。
crashloopbackoff 2003-12-09
  • 打赏
  • 举报
回复
判断一下再转换呀,如果是DBNull,则赋值""。

还有可能就是你的SQL语句有问题。

给个小小的建议,带参数的情况下最好使用存储过程,这样把程序代码和数据代码分开,调试起来会方便许多。
WWWFIND 2003-12-09
  • 打赏
  • 举报
回复
首先,你应该测试一下你的SQL语句。你的系统报错就是由于SQL语句不正确造成的。
关于DBNULL,如果数据没有返回数据或者返回数据为NULL则ExecuteScalar返回的为DBNULL,可以进行一下判断:
DIM MyObject as Object
MyObject=sql.ExecuteScalar
If Not MyObject.GetType.Equals(GETTYPE(DBNull)) Then '如果不为DBNULL
a = CStr(MyObejct)
End If

gOODiDEA 2003-12-09
  • 打赏
  • 举报
回复
如果您的SQL语句查询到的结果为NULL它就会这样,你把"select max(工作组ID) from 工作组 where 工作组ID like '" & Me.ComboBox1.SelectedValue & "'&"

生成的语句放到SQL查询分析器里去试试。

try

Dim c As Object
c = sql.ExecuteScalar
if c = System.DBNull.Value then
a = ""
else
a = CType(c, String)
end if
jh123 2003-12-09
  • 打赏
  • 举报
回复
或提示:
未处理的“System.Data.SqlClient.SqlException”类型的异常出现在 system.data.dll 中

其他信息:系统错误。

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧