PDA

View Full Version : سوال: اعمال تغییرات جدید دیتابیس sql در سی شارپ



sadaf_
پنج شنبه 17 آذر 1390, 10:11 صبح
باسلام
وقتی برنامه را ارائه می کنیم بعد از مدتی که در دیتابیس ممکن است field هایی یا table هایی یا ...
به دیتابیس اضافه بشه یا حذف بشه یا تغییراتی در دیتابیس صورت بگیره حالا برای اعمال تغییرات در دیتابیس هایی برای اون هایی که نیاز پیدا می کنند برای استفاده هر چه بهتر برنامه صورت بگیره.
کم هزینه ترین روش اینه که در exe برنامه بیام تغییراتی می خوام رو بدم و دیتابیس Update
با چه روش هایی این کار رو بهتره انجام بدم

sadaf_
پنج شنبه 17 آذر 1390, 13:47 عصر
لطفا کمکم کنید

gilas1368
پنج شنبه 17 آذر 1390, 14:18 عصر
این کارو خودتون انجام می دین یا مصرف کننده؟
برای اینکار عملا باید سورس کد رو داشته باشین در غیر این صورت فکر نمی کنم بشه چنین کاری روانجام داد.
شایدم من ندیدم
اگه راهی پیدا کردید به من رو هم بی نسیب نزارین

sadaf_
پنج شنبه 17 آذر 1390, 17:41 عصر
احتیاجی نیست کاربر کاری انجام بده
می خوام کاری رو انجام بدم که اول بیام چک کنم آیا مثلا در table فیلد myField وجود دارد
اگر وجود نداشت همون فیلد رو اضافه کنم به table اگر داشت برم سراغ تغییر بعدی

sadaf_
یک شنبه 27 آذر 1390, 13:03 عصر
کسی نیست یه راهی برای حل این مشکل بده
این روشی که همه بهش نیاز پیدا می کنند

gilas1368
یک شنبه 27 آذر 1390, 13:05 عصر
آخه اینکار تمام کدهای نوشته شده رو نابود میکنه و سیلی از خطا رو بوجود میاره
من به شخصه تا حالا چنین برنامه ای رو ندیدم

reza_mostafavi63
یک شنبه 27 آذر 1390, 15:02 عصر
آخه اینکار تمام کدهای نوشته شده رو نابود میکنه و سیلی از خطا رو بوجود میاره
من به شخصه تا حالا چنین برنامه ای رو ندیدم

دوستمون درست ميگن . اين كار كاملا اشتباهه و كم كم برنامه رو به نابودي ميكشونه و كار اشتباهيه با اين حال
اگه دقت كني داخل آنتي ويروس ها يك UpdateDatabase هست و يك UpdateProgram ....
توي UpdateDatabase شما فقط مقادير جداولت Update ميشه نه فيلد ها .
ولي تو UpdateProgram بايد سيستمي طراحي كني كه علاوه بر تغير exe برنامه ... اطلاعات ديتابيس قبلي روي ديتابيس جديد نوشته بشه و.... سپس جايگزين بشن .

zarrinnegar
یک شنبه 27 آذر 1390, 15:13 عصر
من یه سوالی میپرسم
اگر دیتابیسی رو تغییر دادیم و فیلدی اضافه کردیم و table اضافه کردیم و ... مگر توی برنامه برای پرکردن و نمایش و گزارش مگه به فرم و ابزار ها نیاز نداریم؟
اونها رو چیکار میکنی؟
مگر اینکه برنامه رو از اول به روشی طراحی کنیم که کاربر اجازه اضافه کردن فیلد رو داشته باشه و بتونه فرم ایجاد کنه و ایزارهای لازم رو روی فرم بچینه و .....
اگه میتونی اینطوری برنامه بنویسی آره میشه
در غیر اینصورت باید تغییرات رو به دیتابیس بدی و exe جدید رو هم بسازی و بعد به کاربرات بگی که فایل جدید رو دانلود کنن و موقع اجرا برای اولین بار بگی تغییرات رو روی دیتابیس اعمال کنن
البته این کار رو با ثبت شماره نسخه در رجیستری و چک کردن اون با ورژن برنامه میشه تشخیص داد و پس از اجرای قسمت update بانک اطلاعات ، شماره نسخه در رجیستری رو با exe جدید یکی کنیم که دفعه بعد دوباره اجرا نشه

Arash_janusV3
دوشنبه 28 آذر 1390, 10:26 صبح
با سلام
من با sadaf_ موافقم
تا کی باید تغییرات دیتابیس رو دستی انجام بدیم در صورتی که با یک الگوریتم ساده می توان این مشکل رو حل کرد
مثلا
دستورات تغییرات دیتابیس رو در برنامه می نویسیم و هر تغییری باید بعد از یک شرط قرار بگیره
برای اضافه شدن فیلد باید قبلش چک کنیم آیا وجود داره یا نه اگر نداشت اضافه بشه البته باید قبل از اینکه فرم main لود می شه چک کرد
خیلی ساده ست ولی نمی دونم با کد نویسی چطوری می شه نام فیلد یا table رو چک کرد
با این روش هیچ وقت یک فیلد دو بار روی یک دیتابیس add نمی شه و می شه بعد از اینکه همه مشتری هایی که از برنامه استفاده می کنند exe نهایی رو دریافت کردند همه تغییرات دیتابیسی که در برنامه وجود داره رو پاک کرد و تغییرات جدید رو کد نویسی کرد

reza_mostafavi63
دوشنبه 28 آذر 1390, 12:14 عصر
با سلام
من با sadaf_ موافقم
تا کی باید تغییرات دیتابیس رو دستی انجام بدیم در صورتی که با یک الگوریتم ساده می توان این مشکل رو حل کرد
مثلا
دستورات تغییرات دیتابیس رو در برنامه می نویسیم و هر تغییری باید بعد از یک شرط قرار بگیره
برای اضافه شدن فیلد باید قبلش چک کنیم آیا وجود داره یا نه اگر نداشت اضافه بشه البته باید قبل از اینکه فرم main لود می شه چک کرد
خیلی ساده ست ولی نمی دونم با کد نویسی چطوری می شه نام فیلد یا table رو چک کرد
با این روش هیچ وقت یک فیلد دو بار روی یک دیتابیس add نمی شه و می شه بعد از اینکه همه مشتری هایی که از برنامه استفاده می کنند exe نهایی رو دریافت کردند همه تغییرات دیتابیسی که در برنامه وجود داره رو پاک کرد و تغییرات جدید رو کد نویسی کرد

اگه ميخواستيم اين كار رو بكنيم ديگه چرا Sql Managment رو ساختن ؟؟؟؟ شما شايد بتوني با دستورات برنامه نويسي چند تا جدول درست كني يا حذف كني ولي آيا ميتوني از همه امكانات Sql server با اين روش استفاده كني ؟

اصلا يه سوال : وقتي تو ميخواي خودتو به زحمت بندازي و كدهاي عجيب غريب Sql رو در C# اجرا كني هدفت چيه ؟ميخواي ديتا بيس رو مديريت كني ديگه ؟؟؟ آيا راه ساده تر براي مديريت استفاده از همون Sql Managment نيست ؟

Arash_janusV3
دوشنبه 28 آذر 1390, 12:54 عصر
فرض می کنیم 100 موسسه از برنامه ها استفاده می کنند
به نظر شما راه منطقی اینه که برای هر تغییر در دیتابیس و به روز رسانی اونها باید بریم 100 تا موسسه رو دیتابیس ها رو تغییرات رو اعمال کنیم
این روش خارج از تکنولوژی مایکروسافته و برای به روز رسانی باید ساعت ها وقت گذاشت و روز به روز حجم مشتری ها و ... از کنترل خارج می شه
با این روش به روز رسانی دیتابیس کاربر درگیر هیچ چیزی نمی شه فقط به exe نیاز داره همین

reza_mostafavi63
دوشنبه 28 آذر 1390, 13:38 عصر
فرض می کنیم 100 موسسه از برنامه ها استفاده می کنند
به نظر شما راه منطقی اینه که برای هر تغییر در دیتابیس و به روز رسانی اونها باید بریم 100 تا موسسه رو دیتابیس ها رو تغییرات رو اعمال کنیم
این روش خارج از تکنولوژی مایکروسافته و برای به روز رسانی باید ساعت ها وقت گذاشت و روز به روز حجم مشتری ها و ... از کنترل خارج می شه
با این روش به روز رسانی دیتابیس کاربر درگیر هیچ چیزی نمی شه فقط به exe نیاز داره همین
1. براي به روز رساني برنامه نياز نيست بري و دونه دونه برنامه ها رو تغير بدي ... اين كار رو فايل exe تو انجام ميده (اون هم از اينترنت آپديت ميشه)ولي نه اينكه بياد دستورات sql رو با خودش حمل كنه ، بلكه غالب ديتابيس رو با خودش حمل ميكنه و در سيستم مبدا اطلاعات اون را با استفاده از همون exe بروز رساني ميكنه ..

در ثاني اگه بگيم حرفه شما درست ... شما در آپديت اول برنامه مياي 20 خط براي آپديت ديتابيس مينويسي .. آپديت بعدي 20 خط ديگه به كدهاي قبلي اضافه ميكني ووو آپديت بعدي ... يه جايي ميبيني كه تو بره آپديت ديتابيس اوليه هزاران خط نوشتي كه چي ؟؟ ديتابيس رو آپديت كني .... آيا خوانايي ديتابيس و برنامه پايين نمياد ؟

Arash_janusV3
دوشنبه 28 آذر 1390, 14:06 عصر
در روش اول شما اشاره داشتید به حمل کردن دیتابیس می شه یه سری اطلاعات در این خصوص بدین
با سپاس

و اما در مورد بحث دوم
وقتی ما مطمئن باشیم همه کاربر ها exe های نسخه نهایی رو دارند خوب کدهای update دیتابیس رو پاک می کنیم و دیگه نیازی بهشون نداریم

reza_mostafavi63
دوشنبه 28 آذر 1390, 17:09 عصر
ولي تو UpdateProgram بايد سيستمي طراحي كني كه علاوه بر تغير exe برنامه ... اطلاعات ديتابيس قبلي روي ديتابيس جديد نوشته بشه و.... سپس جايگزين بشن .
در واقع ديتابيس جديد ميتونه هيچ داده اي نداشته باشه ... يعني فقط جداول و view ها و procedure ها و ....... داخلش هست و بايد در سيستم مقصد با توجه به مقادير جدول قبلي .. جداولش پر بشه
مقادير جديد هم كه در كنار فايل آپديت هستش ديگه..
البته اين نظر من هستش .... ميتونه راه هاي بهتر و اصولي تري هم باشه .....