PDA

View Full Version : ثبت اطلاعات در بانک اطلاعاتی از یک فرم در 34 جدول جداگانه.



RIG000
سه شنبه 23 خرداد 1391, 22:21 عصر
با سلام.
سوال در مورد insert اطلاعات تو جدول :/
ببینید ما یک فرمی داریم که چندین تکست باکس داره از به طور مثال نام نام خانوادگی و ادرس . این فیلد ها تو یک فرم هست که باید اطلاعات تو جدول ثبت شه . حالا ما در نظر میگیریم که یک 3nf انجام دادیم تو بانکمون و نام تو یه جدول نام خانوادگی تو یه جدول دیگه و آدرس تو یه جدول دیگه . حالا میخایم اطلاعات رو ثبت کنیم از برناه تو این جداول . این جداول هم با یک جدول دیگر که کد نام و کد نام خانوادگی و کد آدرس در ارتباط هستند باهم. پس 4 جدول داریم. کوئری که ما برای ثبت اطاعات میزینم چطور میشه ؟ یعنی 3 اینسرت جداگونه داریم؟ برای select اطلاعات از iner join استفاده میشه . اما برای ثبت و اپدیت و delete این چطوریه؟ اگه همه ی فیلد ها تو یه جدول بودن یک اینسرت داشتیم اما الان 4 جدول داریم که باید اطلاعات توشون ذخیره شه که هنگام ثبت نام و نام خانوادگی و ادرس در 3 جدول بشینه و 3 کد هم تو جدول 4روم که کد نام کد نام خانوادگی و کد ادرس هست {این 3 کد برای ریلیشن دادن با کد های 3 جدول دیگه هستش} . اگه میشه یه نمونه مثال برنامه بذارید. ممنون.

RIG000
چهارشنبه 24 خرداد 1391, 00:02 صبح
کسی نبود کمک کنه؟

cherchil_hra
چهارشنبه 24 خرداد 1391, 07:43 صبح
برای اینکه مطمئن بشی که هر 4تا دستورت اطلاعات رو درج می کنند (اطلاعاتت ناقص نباشه) هر4 تا دستور رو باهم می نویسی و از TRANSACTION و commit و roll back استفاده کنی

اینم مثال با استفاده از @@ERROR و TRY...CATCH (http://www.4guysfromrolla.com/webtech/041906-1.shtml)

برای update هم همینطور
برای حذف هم می تونی relation جداولت رو تنظیم کنی که به صورت آبشاری حذف انجام بده

RIG000
چهارشنبه 24 خرداد 1391, 10:47 صبح
متو جه نشدم . الان به طور مثال باید یعنی 4 تا ا ینسرت داشته باشیم . سپس با اون کد ها مدیرت خطا رو انجام بدیم . در شمن اون کد ها کمی گیجم کردن.!!!!!!!!!!

cherchil_hra
چهارشنبه 24 خرداد 1391, 14:43 عصر
مثل try .. catch خود .net می مونه. با فرض اینکه sql 2005 یا بالاتر استفاده می کنی. اینجوری میشه :

DECLARE @id AS INT
BEGIN TRY
BEGIN TRANSACTION
--INSERT ثبت نام
@id = SCOPE_IDENTITY()
--INSERT2
--INSERT3
...
--INSERT n
COMMIT
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0
ROLLBACK
--SELECT
-- ERROR_NUMBER() AS ErrorNumber,
-- ERROR_SEVERITY() AS ErrorSeverity,
-- ERROR_STATE() AS ErrorState,
-- ERROR_PROCEDURE() AS ErrorProcedure,
-- ERROR_LINE() AS ErrorLine,
-- ERROR_MESSAGE() AS ErrorMessage
END CATCH

از SCOPE_IDENTITY می تونی برای بدست آوردن آخرین ID درج شده در جدولت استفاده کنی. البته اگه مقدار دهیش به صورت خود به خود باشه، وگرنه موقع insert خودت می دونی مقدار ID چی هست. حالا اگه سه تا ID لازم داری که باید ازشون استفاده کنی (در جدول آخر) بعد از دستور insert مربوط به هرکدام این کار رو انجام بده.

توی قسمت catch هم می تونی از اون select که گذاشتم استفاده کنی یا چیزایی که خودت می خوای

موفق باشی