باسلام
من برنامه ای نوشتم که بانک اطلاعاتی اش در حال تغییر است می خواهم از بانکی که خودم با هاش کار می کنم یک اسکریپت یا کدی بنویسم که با اجرای اون روی بانک اطلاعاتی مشتریانم هرچه کم داشت اضافه شود اگه کسی می دونه خواهشا کمک کنه ممنون
باسلام
من برنامه ای نوشتم که بانک اطلاعاتی اش در حال تغییر است می خواهم از بانکی که خودم با هاش کار می کنم یک اسکریپت یا کدی بنویسم که با اجرای اون روی بانک اطلاعاتی مشتریانم هرچه کم داشت اضافه شود اگه کسی می دونه خواهشا کمک کنه ممنون
سلام
سوالتو واضح تر بگو
هرچه کم داشت یعنی چی؟
منظورم اینه که چون هنوز برنامه کامل نشده در حین کدنویسی مجبور میشم یک جدول به بانک اضافه کنم یا یک فیلد به یکی از جدول ها اضافه کنم به همین دلیل سخته برام وقتی بخواهم برنامه جدید را برای مشتریان نصب کنم ببینم چه جداولی داردیا همه جدول ها را باز کنم ببینم تمام فیلدها را دارد اگرفیلد جدیدی بود اضافه کنم
کسی نیست جواب بده
من از بانک اطلاعاتی خودم اسکریپت ساختم و کوئری آن را روی بانک اطلاعاتی دیگری اجرا کردم اگر جدول اضافه شده بود را به بانک اضافه کرد ولی فیلدجدید را اضافه نمی کند/
سلام..شما باید اسامی جدولها و فیلدهای اضافه شده شده رو داشته باشی و یکجا یادداشت کنی و بعد با دستورات اس کیو ال جدولها و فیلدها رو اضافه کنی...در کل به نظر من کاری که میخواین انجام بدین اصلا استاندارد نیست...
باسلام
یه برنامه دارم می نویسم که تقریبا آماده شده و به چند نفرفروختیم هرروز دارم امکانات جدید به برنامه اضافه می کنم به همین دلیل ممکنه یک فیلد به جدول اضافه شود یا کلا یک جدول جدید به بانکم اضافه شود حالا می خواهم یک اسکریپت یا هرکدی بنویسم که با اجرای او در سیستم مشتری بانک اطلاعاتی اش به روز شود یعنی هر فیلد یا جدولی کم داشت اضافه شود من اسکریپت از بانک اطلاعاتی اس کیوال ام گرفتم روی بانک اطلاعاتی دیگه ای اجرا کردم جداولی که نداشت اضافه شد ولی فیلدی که به یکی از جداول اضافه کرده بودم را اضافه نکرد
کسی نیست راهنمایی ام کنه؟
با نظر این دوستمون موافقم.
برا تغییر هم می تونید از دستوراتALTER TABLE table_nameاستفاده کنید
ADD column_name datatype
این لینکا ببینید
از این دسنورات قبلا استفاده می کردم ولی اگه یک برنامه ای یک کدی بود که از ساخنار دیتابیس کپی یا اسکریپت می گرفت وبا اجرای اون روی بانک های اطلاعاتی دیگه ساختار بانک دومی مانند اولی می شد خیلی عالی بود
هرچند اسکریپت این کار رو میکنه یعنی اگر از بانکی اسکریپت بسازی و روی بانک دیگه اجرا کنی تمام جداولی که بانک دومی ندارد را ایجاد می کند ولی اگر فقط فیلدی به یکی از جداول اضافه شده باشد را اضافه نمی کند
برای اینکار بهترین راه استفاده از Entity framework هست، شما که بانک اطلاعاتی تون الان آماده هست باید از Database First استفاده کنید، EF براتون یه مدل کامل و کدهای Strongly-typed میسازه و از این به بعد شما میتونید بدون اینکه درگیر جزئیات SQL بشید فقط با مدل های EF یا کدهای #C کار کنید؛ اصلاً هم کار سختی نیست، با فرض اینکه با MVC کد نمی نویسین (چون اونوقت حتماً با EF کار میکردین) یا برنامه تون تحت وب نیست، یک نمونه رو اینجا می تونید ببینید.
مراحل کار هم ساده است:
روی پروژه راست کلیک:
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 استفاده کنید که اونهم مشابه همین کار رو میکنه (+) و مجموعه DBML درست میکنه ولی قدیمی تر هست و خیلی درگیر جزئیات میشین و مثلاً برای بانک من 11201 خط کد تولید کرد که تمام موجودیت ها و رخدادها و ... رو شامل میشه و درسته خودش یک کلاس آموزشی هست! ولی مدیریتش سخت میشه و از طرف دیگه امکانات EDMX رو هم نداره.
* هیچوقت از هردوتای روشهای فوق همزمان استفاده نکنید. ناسازگاری برای کلاس هاتون ایجاد میکنه، چون همشون مشترک هستند.
یعنی میشه با EF برنامه خودش نواقص یا تغییرات بانک رو بفهمه و بعد خودش اونها رو برطرف کنه؟
فرض کن نواقص و تغییرات تو ورژن جدید برنامه اینا هستن :
1. جدولی برای تراکنش یه کاری به ورژن جدید اضافه شده
2. به جدول دیگری یک فیلد جدید اضافه شده
حال میخواییم وقتی کاربر نرم افزار رو به روز کرد، نرم افزار که خودش خطا میده واسه نبود این جدول و فیلد؛ تابعی باشه که توسط کاربر اجرا بشه و نرم افزارمون هم بانک اطلاعاتی کاربر رو به روز کنه.