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

VB では機能しますが、文字列を Nothing と比較しないようにしています。

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

クエリのステートメントでこの状況を処理できると思います。

SELECT ISNULL(FieldID,"0") FROM テーブル名

その後、プログラムで結果を検証します。

もしそうなら……そうでなければ……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 に答える