PDA

View Full Version : تعریف کانکشن به صورت پویا



مهدی رحیم زاده
پنج شنبه 25 مرداد 1386, 01:02 صبح
سلام
من یه برنامه کلاینت - سروری دارم مینویسم ...
حالا این برنامه باید روی کامپیوتر هایی اجرا بشه که ip سرور اونا مشخص نیست ...
چطوری این کانکشن رو تعریف کنم که وقتی exe برنامه رو انتقال می دم بعد خودم بتونم ip سرور رو تو کانکشن تغییر بدم ؟؟؟؟

mehdi.mousavi
پنج شنبه 25 مرداد 1386, 01:30 صبح
سلام
من یه برنامه کلاینت - سروری دارم مینویسم ...
حالا این برنامه باید روی کامپیوتر هایی اجرا بشه که ip سرور اونا مشخص نیست ...
چطوری این کانکشن رو تعریف کنم که وقتی exe برنامه رو انتقال می دم بعد خودم بتونم ip سرور رو تو کانکشن تغییر بدم ؟؟؟؟


سلام.
ConnectionString رو در ConnectionStrings Element در فایل app.config تعیین کنید. سپس بعد از Compile برنامه، هر وقت نیاز داشتید، می تونید در فایل myApplication.exe.config اونو تغییر بدید. (myApplication.exe نام برنامه شماست). البته ترجیحا باید این بخش از XML رو Encrypt کنید تا کسی به اطلاعاتش دسترسی نداشته باشه. این کار هم با ابزارهای .NET به سادگی میسره.

hdv212
پنج شنبه 25 مرداد 1386, 01:36 صبح
ضمنا میتونید به جای ذخیره ی ConnectionString در app.config برنامه، نام کامپیوتر سرور، نام کاربری و ... رو در فیلدهای جداگانه ذخیره کنید، و در موقع نیاز، در کد برنامه تون ConnectionString رو با توجه به متغیرهای ذخیره شده در فایل app.config برنامه تون بسازید. اینطوری کدنویسیتون انعطاف پذیر تر میشه.

iman_s52
پنج شنبه 25 مرداد 1386, 14:19 عصر
خوب یه مشکلی که هست دیتا ست ‍ConnectionString رو از App.Config می خونه که اونم جزو مقادیر ReadOnly و نمیشه عوضش کرد چطوری این کار و انجام میشه داد .
اگه بشه مقدار ConnectionString ذخیره شده رو عوض کرد مشکل DataSet های منم حل میشه ؟؟؟

PC2st
پنج شنبه 25 مرداد 1386, 15:59 عصر
خوب یه مشکلی که هست دیتا ست ‍ConnectionString رو از App.Config می خونه که اونم جزو مقادیر ReadOnly و نمیشه عوضش کرد
Scope مربوط به ConnectionString رو به User تغییر بدید.

iman_s52
پنج شنبه 25 مرداد 1386, 21:40 عصر
اجازه عوش کردن Scope رو نمیده ؟
چیکارش کنم؟

hdv212
پنج شنبه 25 مرداد 1386, 22:11 عصر
میشه بگی چه پیغام خطایی میده ؟
در ضمن برای برنامه های حرفه ای و واقعی، خصوصا client/server سعی کن از طریق کد، دیتاست رو بسازی (تازه دیتاست هم واسه زمانی که چند تا جدول رو میخوای و میخوای ارتباط رابطه ای هم بینشون باشه و گرنه من خودم از dataTable به جای دیتاست برای نمایش اطلاعات استفاده میکنم که اون هم با Datareader پر میشه)

iman_s52
پنج شنبه 25 مرداد 1386, 22:38 عصر
آخه من تویه فرم ها گرید گذاشتم و واسه نشون دادن اطلاعاتم از TableAdapter استفاده می کنم . که وقتی گرید رو ست می کردم خودش دیتا ست رو ساخته . حالا برنامه جوریه که کاربر حق انتخاب سال مالی داره و ممکنه یکی اط دیتا بیس ها رو انتخاب کنه حالا وقتی که اینکار رو می دخوام پیاده سازی کنم میاد همون دیتا بیسی که موقع طراحی انتخاب کردم رو فقط وصل میشه .
خصوصیت ConnectionString تویه Setting هم چون از نوع Application بود نمیذاره عوضش کنم.
این مشکل رو چطوری حلش کنم ؟؟
در ضمن با همون اسم اومدم یه Setting مد User ساختم و ConnectionString خودم رو هم گذاشتم ولی بازم فرم هام که باز میشه همون قبلیه.

hdv212
جمعه 26 مرداد 1386, 01:23 صبح
خب نمیتونی توی فرم مورد نظرت، یه sqldataAdapter بسازی با connectionString مورد نظر خودت، ولی به جاس دیتاستی که مورد نظرت هست رو پر کنی ؟

iman_s52
جمعه 26 مرداد 1386, 01:52 صبح
نه چون برنامه رو من ننوشتم و اینجوری آماده شده
حالا چیکارش میشه کرد ؟؟؟؟

PC2st
جمعه 26 مرداد 1386, 02:23 صبح
خصوصیت ConnectionString تویه Setting هم چون از نوع Application بود نمیذاره عوضش کنم.
من تجربه زیادی ندارم، اما اینکه اجازه نمیده نوع Scope رو عوض کنی، خیلی عجیبه!

در آخر اگر هیچ راهی نداشتی از یک فایل متنی استفاده کن و Connection String رو توش بنویس! یا اینکه یک Property Setting دیگه بساز.

DAKAL
جمعه 26 مرداد 1386, 03:33 صبح
اطلاعات مربوط به کانکشن رو تو رجیستری یا یه فایل متنی بنویس و هنگام لود شدن برنامه بخون
اون فایل رو هم قبل از نوشتن رمز و قبل از خوندن رمزگشایی کن

iman_s52
جمعه 26 مرداد 1386, 10:38 صبح
مشکل من موقع باز شدن برنامه نیست مشکل من موق لود شدن فرم هاست که TableAdapter دارند و اونام به دیتاست متصل هستند که دیتا ست هام کاننکشن استرینگشون رو از Setting می گیرن.
this._connection.ConnectionString = global::anbar.Properties.Settings.Default.anbar_co nnectionstring;

PC2st
جمعه 26 مرداد 1386, 12:19 عصر
وقتی نمیشه Scope مربوط به anbar_co nnectionstring رو تغییر داد، یکی دیگه مثلا با نام anb_Connect بسازید و Scope آن رو بصورت User تعریف کنید و در تمام کدهای پروژه، کلمه anb_Connect رو بجای anbar_co nnectionstring جایگزین کنید (Find & Replace).

iman_s52
جمعه 26 مرداد 1386, 20:26 عصر
ممنون از راهنماییتون البته به فکر خودم هم رسید که اینکار رو بکنم و همین کار رو کردم و به نتیجه هم رسیدم با تشکر از دوستان.

once4ever
شنبه 27 مرداد 1386, 12:35 عصر
وقتی نمیشه Scope مربوط به anbar_co nnectionstring رو تغییر داد، یکی دیگه مثلا با نام anb_Connect بسازید و Scope آن رو بصورت User تعریف کنید و در تمام کدهای پروژه، کلمه anb_Connect رو بجای anbar_co nnectionstring جایگزین کنید (Find & Replace).
یه چک بکن ببین اگه تو برنامه ات از کاربر یک آدرس فایل بگیری (برای ذخیره یا نمایش) دیگه کانکشن بانکت کار میکنه یا نه؟!!
البته فقط برای محکم کاری گفتم ;)

iman_s52
شنبه 27 مرداد 1386, 12:58 عصر
یه چک بکن ببین اگه تو برنامه ات از کاربر یک آدرس فایل بگیری (برای ذخیره یا نمایش) دیگه کانکشن بانکت کار میکنه یا نه؟!!
البته فقط برای محکم کاری گفتم ;)

ببخشید منظورتون رو درست متوجه نشدم؟؟
ممنون از توجهتون.

once4ever
شنبه 27 مرداد 1386, 19:42 عصر
دقیق یادم نیست. قبلا یه همچین کاری کرده بودم و داخل برنامه از کاربر مسیری برای ذخیره عکس گرفتم که این کار باعث میشد دیگه مسیر کانکشن درست کار نکنه.
خواهش میکنم