PDA

View Full Version : سوال: پیغام خطای نوع ستون در بانک



Milo_22
سه شنبه 09 فروردین 1390, 23:38 عصر
با سلام خدمت دوستان محترم
من قصد دارم تا یک سری اطلاعات رو داخل بان داده درج کنم که با روال های ذخیره شده هم کار می کنم تمام فیلد های بانک اطلاعاتی در جداول مختلفی که طراحی کردم رو با روال ذخیره شده ( Stored procedure ) و با متغیر های ارسالی چک کردم از نظر نوع و تعداد آرگومانها که هیچ تفاوتی با هم نمی کنند ولی نمی دونم چرا اولا اینکه یکی از فیلد ها رو خالی رد می کنه در حالی که دارم داخل برنامه بهش مقدار می دم ! دوم اینکه چرا پیغام خطایی میده مبنی بر اینکه نوع ستون با مقدار هماهنگی نداره !

68027
برنامه را trace هم کردم و روی این خط پیام داد :

68028
یعنی روی خطی که داره مقدار خالی متغیر day رو ارسال می کنه وارد قسمت catch میشه .
کدی که برای پر کردن این متغیر نوشتم اینه :
if (cmbDay.SelectedItem == "شنبه")
{
day = "شنبه";
}
else if (cmbDay.SelectedItem == "یک شنبه")
{
day = "یک شنبه";
}
else if (cmbDay.SelectedItem == "دو شنبه")
{
day = "دو شنبه";
}
else if (cmbDay.SelectedItem == "سه شنبه")
{
day = "سه شنبه";
}
else if (cmbDay.SelectedItem == "چهار شنبه")
{
day = "چهار شنبه";
}
else if (cmbDay.SelectedItem == "پنج شنبه")
{
day = "پنج شنبه";
}

البته قبلش با switch نوشته بودم ولی جواب نمی داد برای همین تغییر دادم . اشکال از این کد هست ؟ یا از جای دیگه ؟
ممکنه کمک کنید . ممنون از لطف دوستان

ehsanara
چهارشنبه 10 فروردین 1390, 00:27 صبح
اگه ایراد کارت از کد بالاس به این دلیله
باید بنویسی

cmbDay.SelectedItem.ToString()

Directx
چهارشنبه 10 فروردین 1390, 00:32 صبح
نه اگه cmbDay یه comboBox باشه مشکلی نداره فقط یه چک کن ببین فیلد day تو db از چه نوعه(باید جوری باشه که بشه string رو توش ذخیره کرد) اگه درست نشد stored procedure رو هم چک کن ببین مشکلی نداشته باشه
ظاهرا کدت درسته (این قسمتی که گذاشتی)

Directx
چهارشنبه 10 فروردین 1390, 00:55 صبح
دوست من ایشون میخواد رشته آیتمی که انتخاب کرده رو چک کنه باید از ()ToString. استفاده کنه
دوست عزیز شما اول چک کنید:لبخند: همیشه combobox.selectedItem رو می شه با یه string مقایسه کرد زیرا یه object بر می گردونه

ehsanara
چهارشنبه 10 فروردین 1390, 01:16 صبح
دوست عزیز شما اول چک کنید
حرفت درسته
راستی نیازی به این شرط نیست که
میتونی جای شرط بنویسی
day = cmbDay.SelectedItem.ToString();

Directx
چهارشنبه 10 فروردین 1390, 01:20 صبح
شرمنده بازم درست نیست آخه باید اول چک کنه که چیو می خواد تو day قرار بده بعد بیاد day رو مقدار بده:قلب:

ehsanara
چهارشنبه 10 فروردین 1390, 01:35 صبح
شرمنده بازم درست نیست آخه باید اول چک کنه که چیو می خواد تو day قرار بده بعد بیاد day رو مقدار بده:قلب:

منظورت رو متوجه نشدم!
مقداری که داره توی day میریزه دقیقا مقداری هست که از comboBox انتخاب شده پس شرط لازم نداره
مگه اینکه قرار باشه تاریخی از ComoboBox انتخاب نشه و مقدار خالی هم داشته باشه
پس میتونه بنویسه
day = cmbDay.SelectedItem == null ? "" : cmbDay.Text;

ehsanara
چهارشنبه 10 فروردین 1390, 01:38 صبح
کد بالا معادل این هست:

if (cmbDay.SelectedItem == null)
day = "";
else
day = cmbDay.Text;

shadi khanum
چهارشنبه 10 فروردین 1390, 09:22 صبح
یه مشکلی که وجود داره ولی نمیدونم دلیل این error هست یا نه اینه که طول متغیری که واسه Day گذاشتین 8 تاست در حالی که یکی از روزها یعنی چهار شنبه 9 کاراکتره.
اون if که واسه day نوشتی رو یه breakpoint بذار سرش ، خط به خط چک کن ببین چی میشه که day خالیه؟

Milo_22
چهارشنبه 10 فروردین 1390, 10:16 صبح
اگه ایراد کارت از کد بالاس به این دلیله
باید بنویسی

cmbDay.SelectedItem.ToString()


من زمانی که کد رو با switch نوشتم همین کار رو کردم تقریبا کد رو به این صورت نوشته بودم :
String rooz = cmbDay.SelectedItem.ToString();
switch (rooz)
{
case "": day = "شنبه";

break;
case "یک شنبه": day = "یک شنبه";
break;
case "دو شنبه": day = "دو شنبه";
break;
case "سه شنبه": day = "سه شنبه";
break;
case "چهار شنبه": day = "چهار شنبه";
break;
case "پنج شنبه": day = "پنج شنبه";
break;

}

ولی خالی بر می گردونه !

Milo_22
چهارشنبه 10 فروردین 1390, 10:20 صبح
نه اگه cmbDay یه comboBox باشه مشکلی نداره فقط یه چک کن ببین فیلد day تو db از چه نوعه(باید جوری باشه که بشه string رو توش ذخیره کرد) اگه درست نشد stored procedure رو هم چک کن ببین مشکلی نداشته باشه
ظاهرا کدت درسته (این قسمتی که گذاشتی)

بله فیلد day داخل بانک از نوع nvarchr(8) هست . داخل STP هم به همین ترتیب مقدار دادم :
@day nvarchar(9)
البته این مقدار 8 بود که تغییرش دادم به 9 !

Milo_22
چهارشنبه 10 فروردین 1390, 10:30 صبح
یک فیلد داخل بانک دارم که documentID هست که یک کلید خارجی هست به جدول دیگه ای ! مقدارش رو identiyi وارد نکردم چون ممکنه از این مقدار چندین تا داخل جدول وجود داشته باشه . موقعی که دارم مقادیر رو وارد بانک می کنم داخل STP که نوشتم اسم ستون ها رو وارد نکردم و خوب این مشکل رو بوجود میاره که خطا رو میده .
حالا اگر بخوام مقدار documentID رو از جدول دیگه ای که دارم داخل این یکی بریزم چطوری باید این کار رو بکنم ؟ همچنین اینکه هنوزم داره مقدار خالی به day ارسال میکنه ! :ناراحت:

68037

Milo_22
چهارشنبه 10 فروردین 1390, 15:03 عصر
ممنو از دوستان مشکلات برنامه رو با توجه به راهنمایی های خوبتون حل کردم با موفقیت مقادیر رو داخل بانک قرار داد ممنون