PDA

View Full Version : سوال: مشکل ورودی Null برای تابع Convert



hahaie
سه شنبه 01 دی 1394, 13:26 عصر
سلام
دوستان بنده یه پروسیجر توی دیتابیس نوشتم که عمل درج رو توی یه جدول انجام میده و ....
یکی از ورودی ها که از نوع عدد هستش رو باید با استفاده از تابع Convert.toInt32 از تکست باکس بخونم و به پروسیجر بفرستم.
مشکل اینجاس که تکست باکس اگه خالی باشه چون تابع نمیتونه مقدار Null به عنوان ورودی داشته باشه خطا میده.
اگه بخوام یه if و else برای تموم پارامترهام بنویسم که اگر تکست باکس خالی بود Null در غیر اینصورت استفاده از تابع Convert خیلی جالب نمیشه.
روش کوتاهی نیس که اینکار رو بکنم؟
توی ذهنم شکل دیگه ی If هست که از : استفاده میکرد البته اونم اگه جواب بده شکل دستوریش یادم نیس.
ممنون

mohammad2407
سه شنبه 01 دی 1394, 13:36 عصر
var LYSMKWh =
resultsDT.Rows[currentRow]["LYSMKWh"].Equals(DBNull.Value)
? 0
: Convert.ToInt32(resultsDT.Rows[currentRow]["LYSMKWh"]);

hahaie
سه شنبه 01 دی 1394, 15:12 عصر
نفهمیدم.
ببینید من میخوام واقعا اگر تکست باکس خالی هست توی دیتابیس هم مقدار فیلد خالی باشه نه صفر

black_binary
سه شنبه 01 دی 1394, 15:24 عصر
سلام
convert.toint
رو خودت توی یک کلاس با هرشرایطی که میخوای، پیاده سازیش کن.
بعد هنگام کانورت اون کلاس با متد کانورتش رو صدا بزن.


فقط جلوی مقدار بازگشتی ت یه علامت سوال بذار.

hahaie
سه شنبه 01 دی 1394, 16:49 عصر
من فکر میکنم راه حل ساده تری وجود داشته باشه....
مشکل رو اینطور بگم شاید بهتر باشه:
خیلی جاها نیاز هست که از تابع convert که ورودی اون تکست باکسهای فرم هستش استفاده کنیم.منتها مشکل اینه که اگه کاربر متنی داخل اینها ننویسه خطا میده در صورتی که نیاز هست اون تکست باکس خالی باشه.
چه راهی بدون استفاده از دستور if برای رفع این خطا هست؟

hahaie
سه شنبه 01 دی 1394, 17:36 عصر
به این روش استفاده کردم بازم خطا میده:


(txt_degree.Text==null) ? null :Convert.ToByte(txt_degree.Text)

چرا؟چون نوع ها به هم نمیخوره یکی Null اون یکی Byte

hahaie
چهارشنبه 02 دی 1394, 06:45 صبح
کسی جواب این مسئله رو نمیدونه؟ :ناراحت:

ASKaffash
چهارشنبه 02 دی 1394, 07:20 صبح
سلام
اگر بانک شما اسکیوال سرور است شبیه این روش را پیاده سازی کنید :

public static class ExtensionMethods
{
public static string ToText(this string Text)
{
if (Text == null)
return "null";
return "N'"+ Text +"'";
}
}

hahaie
چهارشنبه 02 دی 1394, 08:43 صبح
سلام
اگر بانک شما اسکیوال سرور است شبیه این روش را پیاده سازی کنید :

public static class ExtensionMethods
{
public static string ToText(this string Text)
{
if (Text == null)
return "null";
return "N'"+ Text +"'";
}
}

نوع فیلد توی دیتابیس int هست شما اصلا متوجه حرفای من نشدی

ASKaffash
چهارشنبه 02 دی 1394, 08:48 صبح
سلام
ممنون از نظر لطف شما گفتم شبیه این کد را برای int به کلاس تزریق کنید

hahaie
چهارشنبه 02 دی 1394, 08:58 صبح
یاااااااااااااااااااااااا ااااااااااااااااااااااااا فتم گفتم نیاز به این کارها نیستا گوش نکردید.
اینطور باید نوشت:برای مثال


int i=txt_Code.text !="" ? Convert.toInt32(txt_Code.text):(int?)null

Mahmoud.Afrad
چهارشنبه 02 دی 1394, 15:05 عصر
اگر هدف کوتاه کردن کد هست کدی که ASKaffash (http://barnamenevis.org/member.php?63973-ASKaffash) گذاشتند رو اگر اصلاح میکردید به هدف میرسیدید

public static class ExtentionMethods
{
public static int? ToNullableInteger(this string text)
{
if (string.IsNullOrEmpty(text))
return null;
return Convert.ToInt32(text);
}
}

برای هر تبدیل مورد نیاز یک متد به کلاس بالا اضافه کنید. به صورت زیر هم میتونید استفاده کنید
int? i = textBox1.Text.ToNullableInteger();

hahaie
چهارشنبه 02 دی 1394, 15:51 عصر
یاااااااااااااااااااااااا ااااااااااااااااااااااااا فتم گفتم نیاز به این کارها نیستا گوش نکردید.
اینطور باید نوشت:برای مثال


int i=txt_Code.text !="" ? Convert.toInt32(txt_Code.text):(int?)null


خب این بهتر و ساده تر نیست؟

Mahmoud.Afrad
چهارشنبه 02 دی 1394, 15:57 عصر
چون گفتی خیلی جاها به این نوع تبدیلات نیاز داری، بهتر نیست یک متد بنویسی و چندین بار استفاده کنی؟!

hahaie
چهارشنبه 02 دی 1394, 16:11 عصر
نمیدونم ولی فکر کنم اگه قرار باشه برا هر تبدیل یه متد نوشته بشه زیاد جالب نباشه.

aliasghar2
پنج شنبه 03 دی 1394, 10:03 صبح
میتونی از تابع Tryparse لستفاده کنی اگه در زمان تبدیل مشکلی وجود داشته با خودش مقدار صفر برمیگردونه در غیر اینصورت مقدار اصلی رو بر میگردونه
int Number ;
int.TryParse("sdfsdf",out Number);
// Number is 0
int.TryParse("10", out Number);
// Number is 10

hahaie
پنج شنبه 03 دی 1394, 11:51 صبح
میتونی از تابع Tryparse لستفاده کنی اگه در زمان تبدیل مشکلی وجود داشته با خودش مقدار صفر برمیگردونه در غیر اینصورت مقدار اصلی رو بر میگردونه int Number ; int.TryParse("sdfsdf",out Number); // Number is 0 int.TryParse("10", out Number); // Number is 10 نه دوست عزیز نمیخوام مقدارش (اگه خطایی پیش بیاد)صفر باشه میخوایم اگه کاربر هیچی وارد نکرد توی دیتابیس هم Null ذخیره بشه. ولی بازم ممنون چون TryParse رو نمیدونستم.