3

我在下面得到了这个代码:

Dim lJobName As String = ""
SQLCommand.CommandText = "Select JobName from Jobs where Id = @Id "
SQLCommand.Parameters.Add(New SqlParameter("@Id", SqlDbType.Int))
SQLCommand.Parameters(0).Value = var_id
lJobName = SQLCommand.ExecuteScalar()

如果没有找到记录,问题如何捕获?

4

4 回答 4

4

无论手册上说什么,与 Nothing 相比都是行不通的。所以If lJobName Is Nothing当结果集为空时不会触发。

与 DBNull.Value DID 相比对我有用:

If lJobName Is DBNull.Value Then
    'Do something with the error condition
Else
    'Do something with lJobName which contains a valid result.
End If

值得注意的是,当结果集为空(即没有找到记录)时,这不是“错误”。

于 2013-04-11T09:56:05.850 回答
2

我尽量避免将字符串与 Nothing 进行比较,即使它在 VB 中确实有效。

Visual Basic .NET 运行时将 Nothing 计算为空字符串;那是, ””。但是,.NET Framework 不会,并且每当尝试对 Nothing 执行字符串操作时都会引发异常。

加上伪编码器的答案不会像当前显示的那样工作(oJobname 永远不会设置为任何东西)

Dim lJobName as String = String.Empty
Dim oJobName as object = SqlCommand.ExecuteScalar()

If oJobName Is Nothing Then
    'Do something with the error condition
Else
    lJobName = oJobName.ToString
End If
于 2012-11-06T15:01:37.363 回答
1

我认为可以在查询语句中处理这种情况:

从表名中选择 ISNULL(FieldID,"0")

并随后在程序中验证结果:

if then ...... else ...... endif

于 2013-06-25T16:08:19.997 回答
0

ExecuteScalar()Nothing如果有一个空的结果集,则返回,在分配到字符串时应该保留它,所以我会试试这个:

Dim lJobName as String = String.Empty
lJobName = SqlCommand.ExecuteScalar()
If lJobName Is Nothing Then
    'Do something with the error condition
Else
    'Do something with lJobName which contains a valid result.
End If

当然,如果您导致 SqlException,这对您没有帮助,但它应该处理在结果集中找不到行的问题。

http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.executescalar.aspx

于 2012-11-06T14:38:53.370 回答