كيف يمكنني التعامل مع التحويل من النوع "dbnull" إلى كتابة "سلسلة" غير صالح
سؤال
أحتاج إلى بعض المتوقعين نصيحة حول كيفية التعامل مع ما يلي:- لدي حقل بيانات 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:
Convert DBNull to an empty string
(DBNullObj).ToString
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 ...)