PDA

View Full Version : سوال: خطای Object cannot be cast from DBNull to other types.



hadi vafaii
پنج شنبه 12 آذر 1394, 01:20 صبح
سلام عرض می کنم خدمت اساتید محترم
بنده با استفاده از کد بزرگترین مقدار موجود در دیتابیس رو بدست میارم و مثبت یک میکنم
public static int mosbat1()
{

int a;

OleDbConnection con = DB.conection();
OleDbCommand com = new OleDbCommand("select max(ID) from tbl1", con);
con.Open();
a =Convert.ToInt32( com.ExecuteScalar());
a = a + 1;
return a;

}


#endregion


اما وقتی دیتابیس خالیه این خطا رو میده
Object cannot be cast from DBNull to other types.

چجوری میتونم مقدار اولیه بهش بدم تا اگه فیلد دیتابیس خالی بود اونو برابر صفر قرار بده

ژیار رحیمی
پنج شنبه 12 آذر 1394, 06:47 صبح
سلام مشکل مربوط به مقدار NULL برگشت داده شده توسط com.ExecuteScalar()
دلیلش میتونه جدول فاقد رکوردی باشه.شما ابتدا تعداد رکوردهای جدول رو بدست بیار اگر صفر بود دستی Max رو تعیین اگرم بزرگتر از صفر بود آنگاه کویری گرفتن Max ID رو اجرا کن.
با ست کردن DefaultValue برای فیلد مورد نظر در SqlServer

hadi vafaii
پنج شنبه 12 آذر 1394, 11:55 صبح
سلام میدونم به دلیل خالی بودن فیلد این خطا رو میگیره اما برای اینکه اگه خالی بود فیلد اونو برابر صفر قرار بده چی کار باید بکنم ؟ مقدار اولیه از داخل دیتابیس صفر میدم اما باز خطا میگیره
بعد یه سوال دیگه اینکه این تابع بزرگترین مقدار را برمیگردونه یا آخرین رکورد ثبت شده را

ژیار رحیمی
پنج شنبه 12 آذر 1394, 13:00 عصر
شما دوست گرامی اگر فیلد ID شما در جدول tbl1 حالت Auto Increament رو فعال باشه نمشه مقدار کلید رو تغییر داد(خود sql مدیریت کلید اصلی رو برعهده میگیره).وچون کلید هست نمی تواند خالی باشد.شما موقع Insert نیاز به پر کردن کلید اصلی داری اونم با خوندن Max ID ویه واحد اضافه کردن بدست میاد.الان کد شما قبل از چک کردن Max ID تعداد رکوردها رو بخون اگر صفر بود 1 روreturn داده شود اگر بزرگتر از 1 بود آنگاه Max ID جدول ذو بخون باضافه 1 کن و مقدار رو return کن