خطای Value returned null هنگام ثبت مقادیر خالی در دیتابیس
با سلام و احترام
دربانک اطلاعاتی یک جدول به نام Msg_Contacts وجود دارد که یک فیلدی هم با نام آدرس گذاشته شده است و نال پذیر هم هست.
وقتی در برنامه سی شارپ میخواهیم مقدار آدرس را پر نکنم بعد از ثبت اطلاعات خطای فوق را داده و از برنامه خارج میشود میخواهم فیلد آدرس را خالی بگذارم و اطلاعاتی برای این فیلد وارد نکنم و سیستم هم خطا ندهد و عملیات ثبت را انجام دهد.
ممنون میشم بنده را راهنمایی بفرماییید پیشاپیش از لطف شما متشکرم .
کدهای سی شارپ :
Msg_Contacts Msg_C = new Msg_Contacts();
Msg_C.address = dgvContact.CurrentRow.Cells[7].Value.ToString();
خطایی که دریافت میکنم:
System.NullReferenceException: 'Object reference not set to an instance of an object.'
System.Windows.Forms.DataGridViewCell.Value.get returned null.
پاسخ هوش مصنوعی
برای حل مشکل دریافت خطای System.NullReferenceException هنگام دسترسی به مقدار سلولی که ممکن است نال باشد، باید قبل از تبدیل مقدار به رشته، بررسی کنید که آیا سلول نال است یا خیر. می توانید از یک شرط استفاده کنید تا این بررسی را انجام دهید.
به عنوان مثال، کد شما می تواند به شکل زیر تغییر کند:
Msg_Contacts Msg_C = new Msg_Contacts();
Msg_C.address = dgvContact.CurrentRow.Cells[7].Value != null ? dgvContact.CurrentRow.Cells[7].Value.ToString() : null;
با این روش، اگر مقدار سلول نال باشد، آدرس در Msg_C.address نیز نال خواهد بود و خطای NullReferenceException رخ نخواهد داد. بنابراین هم می توانید مقادیر خالی را ذخیره کنید و هم از خطا جلوگیری کنید.
دقت کنید که اگر خطای شما در خط زیر رخ میده :
Msg_C.address = dgvContact.CurrentRow.Cells[7].Value.ToString();
چند نکته رو باید توجه کنید.
- اول اینکه دقت کنید که در DataGridView ستون با اندیس 7 وجود داشته باشه. برای شمارش اندیس ستونها در DataGridView از 0 باید شروع کنید. ضمنا ستونهای مخفی هم باید شمارش بشن.
- نکته بعدی اینکه بهتره فیلد address در Sql Server رو به صورت varchar(max) تعریف کنید. (تفاوت نوع داده ای varchar و nvarchar در Sql Server چیست ؟)
- در آخر هم بهتره برای ستونهایی که احتمال میدید نمیخاید هیچ مقداری رو در اونها ذخیره کنید کد رو به صورت زیر بنویسید :
Msg_C.address = dgvContact.CurrentRow.Cells[7].Value.ToString() + "";
همونطوری که ملاحظه می کنید در انتها "" گذاشتیم. که این باعث میشه مقادیر به string تبدیل بشن.
موارد بالا رو چک کنید اگر خطایی بود بفرمایید.
- آموزش استفاده از پلاگین گردونه شانس در Asp.net core به همراه سورس
- نمایش متن به صورت فرمت شده در CkEditor
- آموزش استفاده از SignalR در Asp.net Core با مثال عملی
- ادغام چند گزارش استیمول سافت بصورت پی دی اف در یک فایل
- نحوه تغییر استایل کامپوننت select2 چگونه است ؟
- چگونه امنیت پروژه را در Asp.net Core افزایش دهیم ؟
- ارسال پارامتر در دستور window.open جی کویری
- ارسال پارامتر از طریق جاوااسکریپت با کلیک روی تگ a
- خطای 500 زمان اجرا شدن پروژه روی هاست
- کویری نویسی در استیمول سافت جهت فیلتر اطلاعات
- مشکل تاریخ شمسی در سی شارپ
- نمایش گزارش stimulsoft روی کلاینت
- حذف کامل یک رکورد در جدول ریلیشن شده
- تفاوت های سی شارپ 8 با نسخه های قبلی چیه؟
- انتخاب چند سطر دلخواه توسط چک باکس در DataGrid و محاسبه جمع سطرهای انتخاب شده
- مقایسه ساختار دو دیتابیس در Sql Server
- اشکال در ایجاد کلید خارجی در Sql Server
- نمایش نوتیفکیشن در سی شارپ
- ارسال پارامتر از سی شارپ به استیمول سافت
- عدم نمایش عکس در دیتاگرید ویو در wpf