كيف يمكنني التعامل مع التحويل من النوع "dbnull" إلى كتابة "سلسلة" غير صالح

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

  •  22-08-2019
  •  | 
  •  

سؤال

أحتاج إلى بعض المتوقعين نصيحة حول كيفية التعامل مع ما يلي:- لدي حقل بيانات misc_text_2 الذي هو من نوع varchar (25) ويسمح 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 الخاص بك isNull (misc_text_2 ، '') لإرجاع سلسلة فارغة بدلاً من dbnull.

نصائح أخرى

يجب عليك التحقق بشكل صريح من DBNull.Value والقيام بالتحويل بنفسك.

بمعنى آخر ، قم ببناء طريقة من شأنها أن تقوم بالتحويل من أجلك ، والأخذ DBNull.Value داخل الحساب.

عدم الإجابة على سؤالك ، ولكن: يجب عليك حقًا إنشاء رمز وراء الطريقة التي يقوم بها التحويل. سيؤدي ذلك إلى تسهيل الفهم والتصحيح الرمز ، وسيجعل من الممكن إعادة استخدام الرمز.

في كل مرة تستخدم فيها التقييم ، يجب عليك التقييم الكسول ، بطريقة ما. للقيام بذلك ، استبدل كل مثيل:

iif(eval("misc_text_2") like ...

مع

iif(IsDbNull(eval("misc_text_2")) OrElse eval("misc_text_2") like ...

ال OrElse سيمنع أي محاولة تحويل dbnull إلى منطقية. ومع ذلك ، من منظور أكثر جوهرية ، الانفجار هو الأكثر تصحيحا. يجب أن يتم ذلك كله من الكود ، وربما في معالج الأحداث ItemDatAbound (أو RowDatAbound).

عند مزيد من التفكير ...

قد يستفيد OP أيضًا من Convert.ToString() الطريقة في الكود الخاص به ، والتي ستحول dbnulls إلى string.empty.

Since we have a legacy database that was set up for MS-Dynamics (Solomon), our method of handling nulls is to convert them to null strings either in the ASP or VB.NET code. i.e.

Trim$(misc_text_2 & " ")

Gets rid of the problem for any version of VB.

If you are using data set designer, the easiest way to get rid of this error is to change the properties of respected column.

NullValue exception to "Empty" instead of "Throw exception".

hope this will help you all.

For convert DBNull or IsDBNull you can try this ways:

  1. Convert DBNull to an empty string

    (DBNullObj).ToString

  2. Create a DBNull Converter Function

    Public Function ConvertDBNullToString(DBNullObj As Object) as string

    if IsDBNull(DBNullObj) then

    return ""

    end if

    return DBNullObj

    End Function

As spiritUMTP suggested, if you are using the Dataset Designer, change the DataColumn.NullValue from "Throw exception" to either "empty" or "Nothing". I chose the latter, and it fixed the problem. I now just check for Nothing (If IsNothing(columnFax) then ...)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top