PDA

View Full Version : ]چگونگی به روز رسانی بانک اطلاعاتی



fatemeh_67
یک شنبه 27 اسفند 1391, 11:12 صبح
باسلام
من برنامه ای نوشتم که بانک اطلاعاتی اش در حال تغییر است می خواهم از بانکی که خودم با هاش کار می کنم یک اسکریپت یا کدی بنویسم که با اجرای اون روی بانک اطلاعاتی مشتریانم هرچه کم داشت اضافه شود اگه کسی می دونه خواهشا کمک کنه ممنون

alexmcse
یک شنبه 27 اسفند 1391, 11:32 صبح
سلام
سوالتو واضح تر بگو
هرچه کم داشت یعنی چی؟

fatemeh_67
یک شنبه 27 اسفند 1391, 12:45 عصر
منظورم اینه که چون هنوز برنامه کامل نشده در حین کدنویسی مجبور میشم یک جدول به بانک اضافه کنم یا یک فیلد به یکی از جدول ها اضافه کنم به همین دلیل سخته برام وقتی بخواهم برنامه جدید را برای مشتریان نصب کنم ببینم چه جداولی داردیا همه جدول ها را باز کنم ببینم تمام فیلدها را دارد اگرفیلد جدیدی بود اضافه کنم

fatemeh_67
یک شنبه 27 اسفند 1391, 13:22 عصر
کسی نیست جواب بده
من از بانک اطلاعاتی خودم اسکریپت ساختم و کوئری آن را روی بانک اطلاعاتی دیگری اجرا کردم اگر جدول اضافه شده بود را به بانک اضافه کرد ولی فیلدجدید را اضافه نمی کند/

AliSaeedi_v
یک شنبه 27 اسفند 1391, 14:54 عصر
سلام..شما باید اسامی جدولها و فیلدهای اضافه شده شده رو داشته باشی و یکجا یادداشت کنی و بعد با دستورات اس کیو ال جدولها و فیلدها رو اضافه کنی...در کل به نظر من کاری که میخواین انجام بدین اصلا استاندارد نیست...

fatemeh_67
دوشنبه 28 اسفند 1391, 08:23 صبح
باسلام
یه برنامه دارم می نویسم که تقریبا آماده شده و به چند نفرفروختیم هرروز دارم امکانات جدید به برنامه اضافه می کنم به همین دلیل ممکنه یک فیلد به جدول اضافه شود یا کلا یک جدول جدید به بانکم اضافه شود حالا می خواهم یک اسکریپت یا هرکدی بنویسم که با اجرای او در سیستم مشتری بانک اطلاعاتی اش به روز شود یعنی هر فیلد یا جدولی کم داشت اضافه شود من اسکریپت از بانک اطلاعاتی اس کیوال ام گرفتم روی بانک اطلاعاتی دیگه ای اجرا کردم جداولی که نداشت اضافه شد ولی فیلدی که به یکی از جداول اضافه کرده بودم را اضافه نکرد

fatemeh_67
دوشنبه 28 اسفند 1391, 13:24 عصر
کسی نیست راهنمایی ام کنه؟

amin_sltny
دوشنبه 28 اسفند 1391, 13:31 عصر
سلام..شما باید اسامی جدولها و فیلدهای اضافه شده شده رو داشته باشی و یکجا یادداشت کنی و بعد با دستورات اس کیو ال جدولها و فیلدها رو اضافه کنی...در کل به نظر من کاری که میخواین انجام بدین اصلا استاندارد نیست...


با نظر این دوستمون موافقم.

برا تغییر هم می تونید از دستورات ALTER TABLE table_name
ADD column_name datatype استفاده کنید

این لینکا (http://www.w3schools.com/sql/sql_alter.asp) ببینید

fatemeh_67
دوشنبه 28 اسفند 1391, 13:54 عصر
از این دسنورات قبلا استفاده می کردم ولی اگه یک برنامه ای یک کدی بود که از ساخنار دیتابیس کپی یا اسکریپت می گرفت وبا اجرای اون روی بانک های اطلاعاتی دیگه ساختار بانک دومی مانند اولی می شد خیلی عالی بود
هرچند اسکریپت این کار رو میکنه یعنی اگر از بانکی اسکریپت بسازی و روی بانک دیگه اجرا کنی تمام جداولی که بانک دومی ندارد را ایجاد می کند ولی اگر فقط فیلدی به یکی از جداول اضافه شده باشد را اضافه نمی کند

amin_sltny
سه شنبه 29 اسفند 1391, 08:10 صبح
از این دسنورات قبلا استفاده می کردم ولی اگه یک برنامه ای یک کدی بود که از ساخنار دیتابیس کپی یا اسکریپت می گرفت وبا اجرای اون روی بانک های اطلاعاتی دیگه ساختار بانک دومی مانند اولی می شد خیلی عالی بود
هرچند اسکریپت این کار رو میکنه یعنی اگر از بانکی اسکریپت بسازی و روی بانک دیگه اجرا کنی تمام جداولی که بانک دومی ندارد را ایجاد می کند ولی اگر فقط فیلدی به یکی از جداول اضافه شده باشد را اضافه نمی کند

من منظورتون را درست نفهمیدم

شما می تونید این کارم بکنید که از تمام اطلاعات در پایگاه دادتون یه نسخه در یه دیتاست بگیرید و بعد تمام جداول را حذف و از ابتدا بسازید و سپس اطلاعات را متناسب با جدول جدید وارد کنید!!

Saeed_m_Farid
سه شنبه 29 اسفند 1391, 10:12 صبح
از این دسنورات قبلا استفاده می کردم ولی اگه یک برنامه ای یک کدی بود که از ساخنار دیتابیس کپی یا اسکریپت می گرفت وبا اجرای اون روی بانک های اطلاعاتی دیگه ساختار بانک دومی مانند اولی می شد خیلی عالی بود
هرچند اسکریپت این کار رو میکنه یعنی اگر از بانکی اسکریپت بسازی و روی بانک دیگه اجرا کنی تمام جداولی که بانک دومی ندارد را ایجاد می کند ولی اگر فقط فیلدی به یکی از جداول اضافه شده باشد را اضافه نمی کند
برای اینکار بهترین راه استفاده از Entity framework (http://msdn.microsoft.com/en-us/data/ef.aspx) هست، شما که بانک اطلاعاتی تون الان آماده هست باید از Database First (http://msdn.microsoft.com/en-us/data/jj206878.aspx) استفاده کنید، EF براتون یه مدل کامل و کدهای Strongly-typed میسازه و از این به بعد شما میتونید بدون اینکه درگیر جزئیات SQL بشید فقط با مدل های EF یا کدهای #C کار کنید؛ اصلاً هم کار سختی نیست، با فرض اینکه با MVC کد نمی نویسین (چون اونوقت حتماً با EF کار میکردین) یا برنامه تون تحت وب نیست، یک نمونه رو اینجا (http://blogs.msdn.com/b/adonet/archive/2010/01/25/walkthrough-poco-template-for-the-entity-framework.aspx) می تونید ببینید.
مراحل کار هم ساده است:
روی پروژه راست کلیک:
Add -> New Item -> Data -> ADO.NET Entity Data Model -> Generate from database
بعد به بانک اطلاعاتی وصل میشین و جداول رو انتخاب میکنید؛ یک Namespace برای مدل انتخاب می کنید و EF براتون 90% کار رو انجام میده (یک مجموعه فایل EDMX که شامل موجودیت ها و ارتباطات اونها میشه)، 10% کار هم اینه که به مدل نگاه کنید و کم و کاستی ها رو رفع کنید.
بعداً هر وقت لازم بود می تونید برعکس مراحل رو انجام بدین، یعنی با تغییر مدل یا کد کلاسهای موجودیت ها به ساختار جدید بانک برسید (بصورت خودکار Generate Database from Model) و دیگه نگران بروز بودن ساختار بانک اطلاعاتی نباشید؛ مزایای مهم دیگه که بدست میارین اینه که میتونید بجای نوشتن دستورات SQL از LINQ استفاده کنید، از Connection string ای که EF براتون میسازه استفاده کنید، برنامتون رو خیلی راحت چندلایه کنید، موجودیت های جدید رو بدون زحمت تغییرات دستی SQL اضافه کنید و موجودیتهای فعلی رو تغییر بدین، کلیدهای خارجی و ارتباطات جداول رو بصورت گرافیکی و شفاف تو مدلها مدیریت کنید، Model Browser رو باز کنید و تمام جزئیات موجودیت ها رو ببینید و درصورت نیاز تصحیح کنید و ....
من نمونه EDMX ایجاد شده برای بانک خودم رو براتون ضمیمه کردم.
________________
* البته یه راه دیگه هم اینه که از LINQ To SQL (http://msdn.microsoft.com/en-us/library/bb425822.aspx) استفاده کنید که اونهم مشابه همین کار رو میکنه (+ (http://weblogs.asp.net/scottgu/archive/2007/05/19/using-linq-to-sql-part-1.aspx)) و مجموعه DBML درست میکنه ولی قدیمی تر هست و خیلی درگیر جزئیات میشین و مثلاً برای بانک من 11201 خط کد تولید کرد که تمام موجودیت ها و رخدادها و ... رو شامل میشه و درسته خودش یک کلاس آموزشی هست! ولی مدیریتش سخت میشه و از طرف دیگه امکانات EDMX رو هم نداره.
* هیچوقت از هردوتای روشهای فوق همزمان استفاده نکنید. ناسازگاری برای کلاس هاتون ایجاد میکنه، چون همشون مشترک هستند.

JaVaD_1900
دوشنبه 12 فروردین 1392, 18:37 عصر
یعنی میشه با EF برنامه خودش نواقص یا تغییرات بانک رو بفهمه و بعد خودش اونها رو برطرف کنه؟
فرض کن نواقص و تغییرات تو ورژن جدید برنامه اینا هستن :
1. جدولی برای تراکنش یه کاری به ورژن جدید اضافه شده
2. به جدول دیگری یک فیلد جدید اضافه شده

حال میخواییم وقتی کاربر نرم افزار رو به روز کرد، نرم افزار که خودش خطا میده واسه نبود این جدول و فیلد؛ تابعی باشه که توسط کاربر اجرا بشه و نرم افزارمون هم بانک اطلاعاتی کاربر رو به روز کنه.