4

IsDBNull私のコードは、エラーなしで自動的に設定する""か、単純にロールオーバーできる場合よりも 2 倍長くなります。

これは私のコードです:

Dim conn As New SqlConnection
conn.ConnectionString = Module1.DBConn2
Dim sqlCommand = New SqlCommand("SELECT * FROM table", conn)
conn.Open()
Dim sqlDataset As DataSet = New DataSet()
Dim sqlDataAdapter As SqlDataAdapter = New SqlDataAdapter(sqlCommand)
sqlDataAdapter.Fill(sqlDataset)
conn.Close()

For Each rs As DataRow In sqlDataset.Tables(0).Rows
    If Not IsDBNull(rs("column")) Then
        Response.Write(rs("column"))
    Else
        Response.Write("")
    End If

    Response.Write("some stuff to write")

    If Not IsDBNull(rs("column2")) Then
        Response.Write(rs("column2"))
    Else
        Response.Write("")
    End If
Next

その場合、ステートメントResponse.Write(rs("column"))の代わりに入力して、空の文字列を出力したいだけです。Ifcolumn IsDBNull

これどうやってするの?

よろしくお願いします!

4

4 に答える 4

5

単に使用String.Joinして渡すことができますrow.ItemArray

For Each row As DataRow In sqlDataset.Tables(0).Rows
    Response.Write(String.Join("", row.ItemArray))
Next

DBNull.ToString空の文字列を返すため、これは機能します。

すべての列に対処したい場合は、DataRowExtensions.Fieldnullable をサポートし、文字列に対してnull/Nothingを返す、厳密に型指定されたメソッドを使用できます。null-coalescing operator次に、 ( ??C# ではIfVB で) を使用できます。

Dim rowInfo = String.Format("{0}{1}{2}",
                            If(row.Field(Of String)("Column1"), ""),
                            If(row.Field(Of String)("Column2"), ""),
                            If(row.Field(Of String)("Column3"), ""))

ただし、とにかく暗黙的に/にString.Format変換されることに注意してくださいnullNothing""If

MSDN :

index で指定されたオブジェクトが null 参照 (Visual Basic では Nothing) の場合、書式項目は空の文字列 ("") に置き換えられます。

于 2013-01-18T14:45:09.470 に答える
3

ここにワンライナーがあります:

Response.Write(rs.IsNull("column") ? "" : rs("column"));

またはそれを拡張メソッドにします:

public string GetValueOrBlankString(this DataRow rs, string column)
{
    return rs.IsNull(column) ? "" : rs(column).ToString();
}

次に、次のように呼び出します。

Response.Write(rs.GetValueOrBlankString("column"));
于 2013-01-18T14:49:15.200 に答える
1

セレスの答えは、あらゆる種類のヌル テストを回避することを考えるとおそらく最良ですが、「IIF」関数も彼女にとって非常にうまく機能することに注意する価値があります。null のテストは引き続き実行されますが、Joe が最初に行っていた方法よりもはるかにコンパクトです。このような何かがうまくいくはずです:

For Each rs As DataRow In sqlDataset.Tables(0).Rows

    Response.Write( IIF( IsDBNull(rs("column")), "", rs("column") ) )

Next

これのいいところは、値が実際にnullの場合、出力したいものを "" に置き換えることができることです(ちょっとしたおまけです)。

これが何であるかを知らない人のために、「IIF」関数に関する情報を次に示します。

http://msdn.microsoft.com/en-ca/library/27ydhh0d(v=vs.71).aspx

于 2013-03-04T17:50:01.230 に答える
1

データセット拡張機能は、クリーンな方法を提供し、強く型付けされています。ただし、型はデータベースの列の型と一致する必要があります。データベース列が null になる可能性がある場合は、以下のように null 許容型を使用します。返された null 許容型の null 値は Nothing になります。

For Each rs As DataRow In sqlDataset.Tables(0).Rows

    'If string, you can use this. Null becomes nothing for the string.
    Response.Write(rs.field(of String)("column"))

    'if it's another type
    Response.Write(rs.field(of Integer?)("column"))


Next
于 2013-01-18T15:29:55.650 に答える