タイプ「dbnull」からタイプ「文字列」への変換を処理する方法は無効です
質問
以下を処理する方法についてのアドバイスが必要です。-Varchar(25)タイプのデータフィールドmisc_text_2があり、nullを許可しています。次の構文を使用する場合
<asp:Label ID="lblPrinter" runat="server" Text='<%# iif(eval("misc_text_2") is dbnull.value, "", iif(eval("misc_text_2") like "NA", "None", iif(eval("misc_text_2") like "KP1", "Kitchen Printer 1", iif(eval("misc_text_2") like "KP2", "Kitchen Printer 2", iif(eval("misc_text_2") like "KP3", "Kitchen Printer 3", iif(eval("misc_text_2") like "BP1", "Bar Printer 1", iif(eval("misc_text_2") like "BP2", "Bar Printer 2", iif(eval("misc_text_2") like "BP3", "Bar Printer 3", Eval("misc_text_2")))))))))%>'></asp:Label>
エラー例外の詳細を取得し続けます:system.invalidcastException:タイプ「dbnull」から「文字列」の入力への変換は無効です。
私は何かが足りないことを知っていますが、何...
前もって感謝します
解決
sql queryの使用では、isnull(misc_text_2、 '')を使用して、dbnullの代わりに空の文字列を返すことができます。
他のヒント
明示的にチェックする必要があります DBNull.Value
そして、自分で変換をします。
言い換えれば、あなたのために変換を行う方法を構築し、取る DBNull.Value
考慮されます。
質問に答えるのではありませんが、変換を行うメソッドの背後にあるコードを実際に作成する必要があります。これにより、コードが理解してデバッグしやすくなり、コードを再利用できるようになります。
評価を使用するたびに、どういうわけか、怠zyな評価をシムインする必要があります。そうするには、次の各インスタンスを置き換えます。
iif(eval("misc_text_2") like ...
と
iif(IsDbNull(eval("misc_text_2")) OrElse eval("misc_text_2") like ...
OrElse
dbnullのブール値への変換の試みを防ぎます。ただし、より基本的な観点から見ると、Bangは最も正しいです。これはすべて、おそらくItemDatabound(またはRowdatabound)イベントハンドラーで、コードビハインドを実行する必要があります。
さらに反映すると...
OPは、を使用する場合もあります Convert.ToString()
彼のコードのメソッドは、dbnullsをstring.emptyに変換します。
MS-Dynamics(Solomon)用にセットアップされたレガシーデータベースがあるため、NULLを処理する方法は、ASPまたはVB.NETコードのいずれかでヌル文字列に変換することです。すなわち
Trim$(misc_text_2 & " ")
VBの任意のバージョンの問題を取り除きます。
データセットデザイナーを使用している場合、このエラーを取り除く最も簡単な方法は、尊敬される列のプロパティを変更することです。
「スロー例外」ではなく「空」のnullvalue例外。
これが皆さんに役立つことを願っています。
dbnullまたはisdbnullを変換するには、この方法を試すことができます。
dbnullを空の文字列に変換します
(dbnullobj).toString
dbnullコンバーター関数を作成します
パブリック関数convertdbnulltostring(dbnullobj as object)as string
isdbnull(dbnullobj)の場合
戻る ""
ifを終了します
dbnullobjを返します
終了関数
Spiritumtpが示唆したように、データセットデザイナーを使用している場合は、dataColumn.nullValueを「スロー例外」から「空」または「何も」に変更します。私は後者を選びました、そしてそれは問題を修正しました。私は今、何もチェックしていません(is Nothing(columnfax)then ...)