4

この長いINSERTステートメントとパラメーターを次のように書き直しています。

    cmd.Parameters.AddWithValue("@Website", General.fnSQLNullValues(tWebsite.Text))

General.fnSQLNullValuesは次のとおりです。

        Public Shared Function fnSQLNullValues(ByVal sValue As Object, Optional ByVal Len As Integer = 999999) As Object
            If sValue Is Nothing Then Return DBNull.Value
            fnSQLNullValues = IIf(sValue.ToString.Length = 0, DBNull.Value, Left(sValue.ToString(), Len))
        End Function

私はこれがまったく好きではありません、そしてこれを行うためのすべてのコードがたくさんあるようです、

       cmd.Parameters.AddWithValue("@Website" , If(tWebsite.Text , DBNull.Value))

私の理解では、tWebsite.Textがnullであるか受け入れられない場合、DBNull.Valueの1行のコードがtWebsite.Textを値として置き換え、一般的な他の関数と同じことを行うように見えます。これは正しく、一方が他方よりも優れていますか?

また、2番目の方法から「共通型を推測できません;オブジェクトが想定されます」という警告が表示されますが、最初の方法はとにかくジェネリックオブジェクトを使用していたようですので、この警告を無視する必要があるかどうかわかりません

4

1 に答える 1

5

コードでデータベース パラメーターを操作する場合、文字列は少し注意が必要です。空の文字列がある場合は、挿入のために空の文字列値が渡されます。ただし、文字列を Nothing の値に設定すると、データベースに NULL 値が挿入されます。それ以外の場合は、空の文字列が設定されます。

理想的には、tWebsite.Text 値をチェックし、パラメーターを設定する関数に Nothing または Text 値を渡す、何らかの種類のビジネス レイヤーをデータ レイヤーの上に配置します。これは、上記の最初のコード例とは少し異なります。そうすれば、データレイヤーは次のコマンドを実行するだけで済みます。

cmd.Parameters.AddWithValue("@Website" , valueWebsite))

...そして面倒なことは必要ありません。

他のデータ型 (整数、小数など) については、Nullable 型を調べて、それらを操作してください。彼らは物事を本当に簡単に扱うことができます。デフォルトでは、これらは Nothing に初期化されるため、(入力ボックスから) 値を割り当てないと、値は Nothing のままになり、データベースに適切な NULL 挿入が行われます。

于 2012-07-06T22:34:15.670 に答える