رفع خطا برای فیلدتکراری(فیلدکلید)
سلام.
وقتی دیتابیس رو با سی شارپ ارتباط بدیم اگه تو دیتابیس فیلدکلیدی وجود داشته باشه،طبیعتا اگرموقع افزودن داده هامون تو برنامه ای که در سی شارپ نوشتیم، مقداراون فیلد رو تکرار بدیم یه خطای خوشگل میاره!:گیج:
مثلا کد دانشجویی کلید باشه و توی فرم ،تکراری بدیم خطا میاره!
من چه جوری به این بگم که اگه تکراری بود فقط یه msgboxنشون بده!
راستی insert رو هم باprocedureدر sqlنوشتم!
اگر عنوان مناسب نیس معذرت میخوام
نقل قول: رفع خطا برای فیلدتکراری(فیلدکلید)
باید قبل از اینکه از Insert استفاده کنی باید یک پروسیجر توی sql بنویسی که یک مقدار مثلا شماره دانشجویی رو بگیره و بعد بگرده توی بانک و اگر بود مثلا false و اگر نبود True رو برگردونه
بعد قبل از insert چک میکنی خروجی این پروسیجر اگر True بود اون وقت بگی که Insert رو اجرا کن
نحوه برگردوندن True ,false توی sql با دستور Return هست
چک کردن رکورد موجود هم
decleare @ted int
set @ted = select Count(*) from person where code=@code
if @ted > 0
return 0
retutn 1
نقل قول: رفع خطا برای فیلدتکراری(فیلدکلید)
گرفتم.
فقط این تیکه رو میشه بگین با چه دستوری بگم تو
procedure
نقل قول:
بعد بگرده توی بانک و اگر بود مثلا false و اگر نبود True رو برگردونه
??
نقل قول: رفع خطا برای فیلدتکراری(فیلدکلید)
در صورتی که تکراری باشه بصورت طبعی خطا تولید میشه و شما باید خطا رو مدیریت کنید برای این کار هم میتونید از کلاس
Sqlexpection استفاده کنید به این صورت :
try
{
//Insert Code
}
catch(Sqlexpection ex)
{
if (ex.Number ==2627)
{
//MessageBox
}
}
نقل قول: رفع خطا برای فیلدتکراری(فیلدکلید)
یه روش دیگه هم اینه که میتونید انجام بدین.
البته شبیه روش دستمون هست ولی به نظرم بهتره :
توی همون پروسیجری که insert می کنید اولش چک کنید اگه شماره داشنجویی هست که مثلا -1 برگردونه و اگه وجود نداره عمل درج رو انجام بده و یه عدد دیگه برگردونه.
بعد از اجرای پروسیجر چک می کنید که اگر عدد برگردانده شده -1 بود خطای مناسب رو نمایش می دین.
کدی که عمل چک کردن رو انجام میده رو میتونید به صورت زیر بنویسید:
if exists (select ID From TableName Where ID=@ID)
return -1;
else
// insert
return 1;
که @ID هم یک پارامتر هست (در مثال شما شماره دانشجویی مورد نظر)
موفق باشید
نقل قول: رفع خطا برای فیلدتکراری(فیلدکلید)
بسیار ممنووونم.
یه چیزی بگم؟من به procedureای که قبلا نوشته بودم دست نزدم اصلا شرط نذاشتم اونجا.اومدم تو برنامهtry/catch نوشتم جواب داد:تشویق:
نقل قول: رفع خطا برای فیلدتکراری(فیلدکلید)
نقل قول:
بسیار ممنووونم.
یه چیزی بگم؟من به procedureای که قبلا نوشته بودم دست نزدم اصلا شرط نذاشتم اونجا.اومدم تو برنامهtry/catch نوشتم جواب داد:تشویق:
درستش همینه ، اگه قرار باشه شما کل رکورد ها رو پیمایش کنید تا ببینید که رکوردی ثبت شده یا نه ، پس SQLServer اینجا چی کار قرار انجام بده!؟
این وظایف به عهده ی بانک اطلاعاتی است نه برنامه نویس...