タイプ「dbnull」からタイプ「文字列」への変換を処理する方法は無効です

StackOverflow https://stackoverflow.com/questions/536212

  •  22-08-2019
  •  | 
  •  

質問

以下を処理する方法についてのアドバイスが必要です。-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を変換するには、この方法を試すことができます。

  1. dbnullを空の文字列に変換します

    (dbnullobj).toString

  2. dbnullコンバーター関数を作成します

    パブリック関数convertdbnulltostring(dbnullobj as object)as string

    isdbnull(dbnullobj)の場合

    戻る ""

    ifを終了します

    dbnullobjを返します

    終了関数

Spiritumtpが示唆したように、データセットデザイナーを使用している場合は、dataColumn.nullValueを「スロー例外」から「空」または「何も」に変更します。私は後者を選びました、そしてそれは問題を修正しました。私は今、何もチェックしていません(is Nothing(columnfax)then ...)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top