PDA

View Full Version : خطا مربوط به عملگر



hamhik
جمعه 03 فروردین 1386, 21:47 عصر
با سلام
هنگامی که از دستور زیر برای مقادیری که مقدار تهی ندارند استفاده می شود برنامه درست جواب می دهد اما هنگامی که تهی باشند برنامه ارور زیر را می دهد مقادیر از بانک اطلاعاتی خوانده می شوند

دستور مربوطه
If objCmd.ExecuteScalar() <> "" Then

که این ارور را می دهد
Operator '<>' is not defined for type "DBNull" and string "".

برای رفع مشکل باید چکاری انجام داد.

برای انجام این مقایسه باید از چه عملگری استفاده نمود؟؟؟

hamhik
شنبه 04 فروردین 1386, 22:46 عصر
لطفا کمک کنید

samanes
یک شنبه 05 فروردین 1386, 00:16 صبح
باید به صورت زیر چک کنید...


if ((objCmd.ExecuteScalar <> null) and (objCmd.ExecuteScalar <> System.DBNull.Value))

msakbari
یک شنبه 05 فروردین 1386, 03:27 صبح
با تشکر از samanes
بهتر است نتیجه ی ExecuteScalar را درون یک متغییر از نوع object قرار بدی و بعد اون متغییر رو با تابع Convert.ISDBNull مقایسه کنی . اینجوری یکبار فقط ExecuteScalar انجام میشه .
موفق باشید.

__H2__
دوشنبه 06 فروردین 1386, 18:01 عصر
سلام
اگر جواب اجرای دستور SQL شما یک String باید بشود. (مثلا نام کالایی را باز میگرداند.)
از دستورات زیر استفاده کنید.


If TypeOf objCmd.ExecuteScalar Is System.DBNull Then
'...
Else
'...
EndIf


ولی در مورد String ها فکر کنم کد زیر بهتر است. (بهرحال حتماَ جواب تابع ExecuteScalar را در متغییری ذخیره کنید و سپس مقدارش را بررسی کنید، چون اگر به آن مقدار نیاز داشته باشید مجبورید مجدداَ تابع ExecuteScalar را فراخوانی کنید، که این کاری بی هوده و زمان بر است و برنامه را کند میکند، تایید تذکر آقای msakbari (http://www.barnamenevis.org/forum/member.php?u=21064))
البته کدهای آقای samanes (http://www.barnamenevis.org/forum/member.php?u=29693) هم که با #C میباشد درست هستند.



Dim s AsString = TryCast(objCmd.ExecuteScalar, String)
If String.IsNullOrEmpty(s) Then
'...
Else
'...
EndIf