PDA

View Full Version : سوال: خطا در EF با پروسیجر !؟



ghasem110deh
پنج شنبه 14 خرداد 1394, 22:24 عصر
سلام به همه ...
دوستان مشکل این کد چیه ؟ (خطا - عکس ضمیمه)

پروسیجر :

ALTER Procedure [dbo].[Professor_Insert] @Code int,
@Name nvarchar(max),
@Family nvarchar(max),
@Alias nvarchar(max),
@Father nvarchar(max),
@Sh_Sh nvarchar(max),
@T_T nvarchar(max),
@Melli_Code int,
@City nvarchar(max),
@Madrak nvarchar(max),
@Study nvarchar(max),
@University nvarchar(max),
@Ministry nvarchar(max),
@Tel nvarchar(max),
@Account nvarchar(max),
@Adr nvarchar(max)
As
Begin
Insert Into Tbl_Professor
([Code],[Name],[Family],[Alias],[Father],[Sh_Sh],[T_T],[Melli_Code],[City],[Madark],[Study],[University],[Ministry],[Tel],[Account],[Adr])
Values
(@Code,@Name,@Family,@Alias,@Father,@Sh_Sh,@T_T,@M elli_Code,@City,@Madrak,@Study,@University,@Minist ry,@Tel,@Account,@Adr)
Declare @ReferenceID int
Select @ReferenceID = @@IDENTITY
Return @ReferenceID

End

کد درج :

void Save() {
Con.Professor_Insert(Convert.ToInt32(Txt_Period_Co de.Text), Txt_Period_Name.Text, Txt_Pro_Family.Text, Txt_Pro_Alias.Text, Txt_Pro_Father.Text, Txt_Pro_Sh_Sh.Text, Txt_Pro_T_T.Text, Convert.ToInt32(Txt_Pro_Mellicode), Txt_Pro_City.Text, Txt_Pro_Academic.Text, Txt_Pro_Study.Text, Txt_Pro_University.Text, comboBox1.Text, Txt_Pro_Tel.Text, Txt_Pro_Account.Text, Txt_Pro_Adr.Text);
MessageBox.Show("Insert Is Done", "OK", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
}

RmeXXXXXXXXX
پنج شنبه 14 خرداد 1394, 23:11 عصر
نوع خطای شما میگه که رشته ورودی به فرمت صحیح نیست.
و اولین خط (در کادر سفید) در مورد عدم توانایی تبدیل رشته به DateTime توضیح میده و میگه اول رشته رو به تاریخ تبدیل کنید!
گزینه View Detail... هم اطلاعات بیشتری در اختیارتون میذاره

ghasem110deh
پنج شنبه 14 خرداد 1394, 23:19 عصر
آخه اصلا فیلد DateTime ندارم !؟
بجز اون دو تا نوع int بقیه متنی هستن ...

RmeXXXXXXXXX
پنج شنبه 14 خرداد 1394, 23:35 عصر
پیداش کردم:
Convert.ToInt32(Txt_Pro_Mellicode)
خاصیت Text رو بهش بدین.
Convert.ToInt32(Txt_Pro_Mellicode.Text)

ghasem110deh
پنج شنبه 14 خرداد 1394, 23:41 عصر
از اون نیست !
باز همون خطا رو میده !؟

RmeXXXXXXXXX
پنج شنبه 14 خرداد 1394, 23:47 عصر
پیشنهاد:
دوست عزیز این نحو کد نوشت تقریباً منسوخ شده (چیزی شبیه الگوی Transaction Script)
بیاید برای افزایش سواد برنامه نویسی و نوشتن کدهای خواناتر وقابل نگهداری تر از تکنولوژی هایی که برای همین منظور بوجود آمده استفاده کنیم.
اول از یک ORM استفاده کنید خیلی خیلی توصیه شده از EntityFramework بهره ببرید. بدین وسیله خودتون و کدهای نازنین C# رو از شر دستورات SQL خلاص میکنید.
دوم از الگوهای برنامه نویسی که توسط تیم های برنامه نویسی بزرگ و با تجریه مطرح شده اند استفاده کنید (مثلا Domain Modelبهمراه DIP)
امروزه پروژه های مفید حداقل شامل این تکنولوژی ها هستند: EntityFrameword , StructureMap, AutoMapper, Castle و یادگیری هرکدام زیاد زمان نخواهد برد اگر با مفاهیم شی گرایی آشنایی خوبی داشته باشن.
سایت های زیر همواره رایگان و آزادانه کمک رسان خواهند بود:
http://www.dotnettips.info
http://agiledevelopment.ir/ebook/cover/

RmeXXXXXXXXX
پنج شنبه 14 خرداد 1394, 23:52 عصر
لطفاً تبدیل به int رو در دو خط قبل از فراخوانی متد انجام بدین ببینید تبدیلها انجام میشن؟

int p,c;
p=int.Parse(txtPeriodCode.Text);
c=int.Parse(txtProCodeMelli.text)
// فراخوانی متد

ghasem110deh
پنج شنبه 14 خرداد 1394, 23:54 عصر
یعنی دیگه از پروسیجر استفاده نمی کنن ؟

RmeXXXXXXXXX
جمعه 15 خرداد 1394, 00:12 صبح
نه! استفاده از اونها رو مخفی میکنن. بدین صورت که شما مثلاً کلاسی دارید که اطلاعات مشتری رو نگه میداره، حالا شما با فراخوانی متدی شبیه context.Add(myCustomer); context.SaveChange(); اطلاعات رو ذخیره میکنید. بدون نیاز به دانستن اینکه اصلاً پایگاه داده یک فایله یا SQL یا Oracle و ... (البته یه سری ملاحضات داره)
شما در شروع برنامه فقط ConnectionString رو بهش میدن و تمام. خودش جداول رو درست میکنه، پروسیجرها رو هم همینطور.

ghasem110deh
جمعه 15 خرداد 1394, 00:16 صبح
دیتابیس رو خودش میسازه ...
یعنی از قبل چیزی وجود نداره (code first) ظاهرا اینجوریه !؟

RmeXXXXXXXXX
جمعه 15 خرداد 1394, 00:32 صبح
دست شما در ایجاد پایگاه داده آزاد است. میتونید اول کدها (مدل برنامه) رو بنویسید تا طبق اونا جداول ساخته بشن. میشه برطبق جدولی از قبل هم مدل رو طراحی کرد و همچنین میشه یک راه میانی رو درپیش گرفت بدین صورت که در ویژول استادیو جداول رو بصورت UML ساخت و بعد مدل و پایگاه رو براساس اون ایجاد کرد...
در کل تکنولوژی های مفیدی در این زمینه هست. از نمونه های جاوایی برای اندروید SQLite و Oracle (معروف ترین NHibernate و حجیم ترین البته) و entityframework که محصول مایکروسافت هست و البته این یکی کاملا رایگان و Open source هم هست.
برای اطلاعات بیشتر به سایت دات نت تیپز http://www.dotnettips.info سایت تخصصی استاد نصیری حتمن سر بزنید