ورود

نسخه کامل مشاهده نسخه کامل : اجرای یک برنامه ی دات نت از روی Share یک کامپیوتر دیگر



ngooran
21-07-2008, 12:35
سلام...
من یک برنامه با 2.0 C# .Net و SQL Server 2005 نوشتم و می خوام که اونو از روی Sharedoc یک کامپیوتر دیگر بر روی کامپیوتری دیگری اجرا کنم. من اومدم فولدر bin/debug رو توی sharedoc کپی کردم اما موقع اجرا از یک کامپیوتر دیگه می گفت که یه سری dll رو پیدا نمی کنه ! البته توضیح بدم که این برنامه به صورت جداگانه روی هردو کامپیوتر اجرا می شود. یعنی اینکه dll های لازم در هر دو کامپیوتر موجود هست.
ممنون می شم اگه کمکم کنید :20:

_H2_
21-07-2008, 23:23
سلام

1- فایلهای داخل مسیر debug همانطور که از نامشان مشخص است، برای انتشار نیستند و سنگین و کند هستند.
2- اجازه دهید خانه را از پایبست درست کنیم.
با انجام عمل فوق میخواهید چه شود؟؟؟؟
فکر میکنید برنامه تان شبکه ای میشود؟؟؟
فکر میکنید میتوانید به منابع رایانه ی اولیه دسترسی داشته باشید؟؟؟

در عمل تفاوتی با اجرای جداگانه روی هر pc ندارد، فقط دارید برنامه را کند و سنگین و مستعد خطا میکنید.

اگر برنامه تان دیتابیسی دارد که هر رایانه در شبکه باید به طور مشترک از آن دیتابیس استفاده کند، به جای این کارها نرم افزارهای SQLServer را درست پیکر بندی کنید تا تحت شبکه کار کند و برنامه تان به طرز منطقی و اصولی یک شبکه رایانه ها را تحت پوشش قرار دهد.

ngooran
22-07-2008, 09:56
سلام
ممنون از جوابتون...
بله شما درست می گین. من دنبال یک راه حل سریع بودم و البته تنظیمات sql server رو برای شبکه ای شدن بلد نیستم...
می شه یه لینک یا بخشی از کتابی رو به من معرفی کنین که از اونجا یاد بگیرم ؟
ممنون از لطفتون

_H2_
23-07-2008, 10:00
سلام
متاسفانه کتاب جالبی در خصوص تنظیمات پیکر بندی SQLServer من نمیشناسم.

ولی سعی میکنم در متنی کوتاه و با شرایط استاندارد، تحت SQLServer2005، توضیحی بدهم.
رایانه ها را که به هم شبکه سخت افزاری کردید، یک رایانه را به عنوان سرور انتخاب کنید، مطئن شوید ویندوز سرور مشکل اجازه نامه و برقراری ارتباط ندارد، مثلاً در Vista بهتر است گزینه Password protected sharing غیر فعال باشد.

به رایانه سرور در شبکه یک نام یا IP انحصاری اختصاص دهید. (چون فکر میکنم، میدانید در کجا هستند، دیگر توضیح نمیدهم.)

SQL Server را بر روی هر دو سیستم سرور و کلاینت یا کلاینتها نصب کنید.

در صورت نیاز با کمک SQL Server Configuration Manager حوزه کاری سرویس اصلی SQL Server را از Local System به Network System تغییر دهید.

در تنظیم ConnectionString در کلاینت ها، اولین قدم ست کردن Data Source با نام یا IP سرور است.
در صورت وجود User و Pass نمونه SQL Server رایانه سرور را هم تنظیم کنید.

البته زیر و بم و شرایط بیشتر هستند ولی اگر تنظیمات SQL Server را ست کنید، مشکلتان حل میشود، میتوانید برای هر رایانه چه سرور و چه کلاینت یک نمونه کامل exe برنامه با مخلفات را کپی کنید و دیتا ها به صورت مجتمع در SQL Server سرور میماند.
با این روش برنامه ی شما میتواند به SQL Server در آنسوی کره زمین و از طریق اینترنت هم وصل شود.

(همانطور که من خودم به راحتی به SQLServer سایتم وصل میشوم.)

سعی کنید و بخواهید میتوانید.

ngooran
23-07-2008, 13:32
بازم ممنون از پاسختون...
ولی می دونید مشکل اینجاست که من connection string رو دستی وارد نمی کنم... خود visual studio می سازه اونو ...
در واقع من یه برنامه نوشتم که توش با دیتابیس کار می کنم ولی این دیتابیس به سرور attach نیست و من اینطوری باهاش کار می کنم که یه dataset دارم که همه Table های دیتابیس ام توی اون به صورت datatable وجود داره... همینطورم برای این table ها توی dataset به تعدادشون table adapter دارم که query هایی رو که می خوام توی این table adapter ها اضافه می کنم و هروقت احتیاج باشه با اون table adapter ها data table مورد نظر رو پر می کنم و سپس از اون استفاده می کنم یا اینکه به دیتابیس ردیفی اضافه یا update میکنم !
به این صورت :


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید


من از اینجا می دونم که دیتابیسم attach نیست که با sql server management studio که نگاه می کنم فقط توی دیتابیس ها اون 4 تا system database وجود داره !
می خواستم کمکم کنید که یه جوری این برنامه رو سر و سامان بدم که دیتابیس attach باشه ولی دیگه این کدهای datatable و table adapter رو عوض نکنم...
ممنون واقعا...

_H2_
24-07-2008, 01:25
سلام


ولی می دونید مشکل اینجاست که من connection string رو دستی وارد نمی کنم... خود visual studio می سازه اونو ...

راه اصولی و حرفه ای و منطقی نه ست شدن توسط VS است و نه توسط کد سر راست شما!
شما باید یک پنجره Options داشته باشید و به نوعی اجازه تغییر ConnectionString را به کاربر برنامه تان بدهید.
مثل دیالوگ ست کردن ConnectionString در خود VS .
البته لزوماً نیاز نیست، همه گزینه ها و شرایط در دسترس کاربران باشد.
میتوانید فقط یک ورودی بگذارید تا کاربر بتواند در تنظیمات برنامه نام یا IP سرور را تنظیم کند، این حداقل ممکن است.
و چه بهتر که ورودی ای هم برای User و Password داشته باشید.



می خواستم کمکم کنید که یه جوری این برنامه رو سر و سامان بدم که دیتابیس attach باشه ولی دیگه این کدهای datatable و table adapter رو عوض نکنم...

اول باید متذکر شوم که کل این تغییرات مورد بحث فقط در مورد ConnectionString است و در اصل به کدهای اصلی شما کاری ندارد.
البته با توجه به کدهای جاریتان که نشان دادید، شاید نیاز باشد یک خط کدجدید برای ست کردن دستی ConnectionString هم اضافه کنید، تا این نمظیم مهم دینامیک در اختیار برنامه و تنظیمات کاربر باشد و یک بار در زمان بالا آمدن برنامه ConnctionString تولید شود و در متغییری ریخته شود و سپس تمام کدها از این ConnectionString برای کار استفاده کنند.

یعنی احتمالاً بایک خط اضافه کردن کد به هر بلاک دستوری این تیپیتان مشکل تغییر کد حل میشود.

(البته روش ایده آل، کمی سخت تر است و اجرایش برای شما، شاید مشکل باشد ولی طئوری فوق الذکر هم خیلی خوب است.)


در مورد Attach هم، فقط نسخه express از این مطلب پشتیبانی میکند و جالب است که نسخه کامل و اصل SQLServer اصلاً قابلیت ارتباط غیر Attach ای ندارد!
برای attach کافیست، فایلهای اصلی پایگاه را در صورت نیاز به مکان مناسب منتقل کنید و گزینه های مربوطه را که احتمالاً بلد هستید در SQL Server Managment پیگیری کنید.

برای کار به صورت شبکه ای هم attach بودن الزامی است که در همه نسخه های SQLServer وجود دارد.
البته من مطمئن نیستم نسخه SQL Server Express بتواند به عنوان سرور شبکه ای رفتار کند،
یعنی تا حالا هر چه شبکه کرده ام با نسخه Developer بوده، یعنی تا حالا Express را تحت شبکه تست نکرده ام.

بحرحال بعد از atrtach کردن باید ConnectionString را اصلاح کنید، چه در روند دینامیک و چه ConnectionString برای TypedDataSet و DataAdapter ها، تا زمان طراحی هم به مشکلی بر خورد نکنید. مثلاً برای رایانه جاری و نسخه express میشود:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

_H2_
24-07-2008, 08:35
سلام
ضمناً بهتر است یک سری هم به قسمت Project->Settings بزنید، اگر بتوانید ConnectionString را در اینجا پیدا کنید، خیلی خوب میشود.
آنگاه احتمالش خیلی زیاد میشود که کدهای DataAdapter موجود در TypedDataSet تان هم از همین استفاده کند و دیگری نیاز به اضافه کردن و اصلاح هیچ کدی در برنامه تان نیست.

و فقط شاید یک سری کد برای قسمت Options برنامه اضافه کنید ولی چیزی تغییر نخواهد کرد.

فعلاً یک نگاهی بیاندازید.
تا بعد.

ngooran
24-07-2008, 12:24
سلام...
واقعا ممنون از پاسخ های سریع و کاملتون... ممنون
در مورد project->settings رفتم دیدم که دوتا connection string داخلش بود !!! یکی برای اون database که داخل فولدر bin\debug هست و یکی هم برای database ای که داخل فولدر اصلی پروژه وجود داره ! که البته من هر تغییراتی که داخل دبتابیس انجام می دم در اون bin\debug رخ می ده...
سوالم الان اینه که من دیتابیسم رو در جایی درون کامپیوتر سرور قرار بدم و آدرس اون رو در این connection string وارد کنم ؟
بعد اینکه شما می گین یه قسمتی برای کاربر بگذاریم که IP سرور رو وارد کنه اون وقت من این connection string ای که با IP جدید ساخته شده رو چطوری به project->settings با کد اضافه کنم ؟
یه سوال دیگه هم دارم که اگه جواب بدین خیلی ممنون می شم... اینکه اون دومین connection string ای که دارم مشکل ساز نیست ؟ اصلا باید همچین چیزی باشه ؟!!!

بازم ممنون از این همه لطف شما...

ngooran
24-07-2008, 12:30
ببخشین اینو یادم رفت که بپرسم :


و فقط شاید یک سری کد برای قسمت Options برنامه اضافه کنید ولی چیزی تغییر نخواهد کرد.


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

بازم ممنون...

ngooran
24-07-2008, 12:39
با عرض شرمندگی من الان که project->settings رو نگاه کردم دیدم که هردو connection string به یک دیتابیس اشاره می کنه !!!
به این صورت :


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

ولی با این حال تغییرات داخل bin/debug/Database1.mdf رخ می ده !!!

_H2_
24-07-2008, 16:46
سلام


در مورد project->settings رفتم دیدم که دوتا connection string داخلش بود !!!

نباید باشد، باید کل برنامه از یک نمونه واحد استفاده کنند.



سوالم الان اینه که من دیتابیسم رو در جایی درون کامپیوتر سرور قرار بدم و آدرس اون رو در این connection string وارد کنم ؟

شما دیتابیس را در سرور مستقر میکنید و بعد ان را به SQLServer باید attach کنید (اگر بلد نیستید یا تا حال انجام نداده اید بگویید) بعد دیگر مسیر دیتابیس اصلاً مهم نیست.
در اصل برنامه ها اصلاً نمیدانند دیتابیس کجا است، در شرایط خاص SQLServer میتواند حتی دیتابیس را به چندین فایل در سرورهای مجزا بشکند، در این حال فقط SQLServer میداند که فایلهای اصلی مورد نیاز کجا قرار دارند.
برنامه شما فقط باید نام یا IP سرور به همراه نام دیتابیس را داشته باشد.
CoinnectionString هم شبیه آن چیزی میشود که در پست قبلیم نوشتم.

- Data Source به نام یا IP سرور و نمونه SQLServer اشاره میکند (اگر فقط یک نمونه SQLServer در رایانه سرور نصب است فقط میتوان نام یا IPسرور را داد)

- Initial Catalog هم به نام دیتابیس



بعد اینکه شما می گین یه قسمتی برای کاربر بگذاریم که IP سرور رو وارد کنه اون وقت من این connection string ای که با IP جدید ساخته شده رو چطوری به project->settings با کد اضافه کنم ؟

اضافه که نمیکنید، همانرا ویرایش میکنید، با <My.Settings.<ItemName میتوانید مقدار جاری را بخوانید یا تغییر دهید.




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

یعنی برنامه شما قرار نیست هیچ پنجره یا دیالوگی برای Option (تنظیمات) داشته باشد؟؟؟!!!
یعنی شما در برنامه هیچ معیاری ندارید که بخواهید، کاربر بتواند آن را تنظیم کند.




ولی با این حال تغییرات داخل bin/debug/Database1.mdf رخ می ده !!!
پس به کجا وصل شود؟ DataDirectory معرف مسیر جاری فایل exe است.
اگر دیتابیس attach باشد، دیگر مسیر مهم نیست و برنامه مسیر را نمیداند و فقط با نام دیتابیس کار دارد.

ngooran
24-07-2008, 22:43
سلام
ممنون از راهنمایی تون...
منظورتون از options رو فهمیدم ولی نفهمیدم که چه کدی برای اون باید اضافه کنم... یعنی همان کد که برای تنظیمات connection string که بره داخل My.settings.connectionstring ؟
در مورد attach کردن هم که همینطوری با sql server management studio انجام بدم کافیه دیگه ؟
یا اینکه کار دیگه ای هم باید انجام بدم ؟

در آخر بازم از این همه وقتی که گذاشتین ممنونم... من اینارو چک می کنم و اگه باز هم مشکلی داشتم مزاحمتون می شم ! ببخشین دیگه...

ممنون...

ngooran
24-07-2008, 23:58
بازم سلام...
من اینی که گفتین رو خواستم انجام بدم ولی وقتی می زنم My.Settings اصلا با intellisense چیزی برام نمیاره ! یعنی اصلا نمیشناسه اینو و ای error رو می ده :


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

بعد من از این استفاده کردم :


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

که برای این هم error زیر رو داد :


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

اگه می شه راهنماییم کنین...

ممنون...

_H2_
25-07-2008, 18:59
سلام


منظورتون از options رو فهمیدم ولی نفهمیدم که چه کدی برای اون باید اضافه کنم... یعنی همان کد که برای تنظیمات connection string که بره داخل My.settings.connectionstring ؟

اگر وقت داشته باشید و بتوانید کمی منتظر بمانید، شاید بتوانم یک نمونه ساده برایتان بگذارم و یک کنترلر هم برای این کار معرفی کنم.



در مورد attach کردن هم که همینطوری با sql server management studio انجام بدم کافیه دیگه ؟
یا اینکه کار دیگه ای هم باید انجام بدم ؟

همین است، کار دیگری نمیخواهد، فقط اگر خواستید برنامه در فرآیند Setup اش این کار را خودکار انجام دهد که بحث دیگری است، وگرنه راه همین است.


من اینی که گفتین رو خواستم انجام بدم ولی وقتی می زنم My.Settings اصلا با intellisense چیزی برام نمیاره !
شرمنده، مشکل از من بود، هواسم نبود که #C کار میکنید، کد فوق برای VB.Net بود و گرچه در ذات هر دو با هم برابر هستند، ولی در این موارد خاص اختلاف در نام namespace های پیشفرض دارند و #C از نام My استفاده نمیکند.

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

ngooran
25-07-2008, 23:31
سلام...
ممنون از پاسختون...



اگر وقت داشته باشید و بتوانید کمی منتظر بمانید، شاید بتوانم یک نمونه ساده برایتان بگذارم و یک کنترلر هم برای این کار معرفی کنم.


ممنون حتما منتظر می مونم اگه زحمتی برای شما نباشه...



مشکل از من بود، هواسم نبود که #C کار میکنید، کد فوق برای VB.Net بود و گرچه در ذات هر دو با هم برابر هستند، ولی در این موارد خاص اختلاف در نام namespace های پیشفرض دارند و #C از نام My استفاده نمیکند.

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید


بله درست می گین ولی من وقتی از این

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

استفاده می کنم و می خوام مقدار دهی کنم می گه که read only هست و نمی شه مقدارش رو تغییر داد!!!

من database رو attach کردم و به صورت دستی اون connection string داخل project->settings رو تغییر دادم و درست کار کرد و داخل دیتابیس attach شده تغییرات رو انجام داد و الان تقریبا فقط مشکلم set کردن این connection string از طریق کد شده...

بازم از راهنمایی و حوصلتون ممنونم....

_H2_
26-07-2008, 22:18
سلام


استفاده می کنم و می خوام مقدار دهی کنم می گه که read only هست و نمی شه مقدارش رو تغییر داد!!!

به همان بخش Settings بروید و آیتم مورد نظر را انتخاب کنید و در پالت Properties خصیصه Scope را به User ست کنید.

ضمناً کلاینتت ها نیاز به نصب SQLServer ندارند.

ngooran
27-07-2008, 10:40
سلام...
ممنونم از پاسختون...
رفتم دیدم ولی نمی شه که اونو از application تغییر داد ! اصلا enable نیست توی properties window !
بازم ممنون...

_H2_
29-07-2008, 02:02
سلام
میبخشید طول کشید .... :11::11::11:
در عوض نمونه کنترلری را که خودم شخصاً برای برنامه هایم را هم درست کرده بودم برایتان گذاشتم.
یعنی نمونه جاری دو پنجره option دارد!
یکی ساده و کدش همانجا موجو است، که میتوانید خودتان متوجه شوید و تکمیلش کنید.

دومی از کنترلر موجود در dll استفاده میکند، این کنترلر بسیار کامل است و کاملاً شبیه نمونه بومی ADO است و البته هر بخشش قابلیت Visible دارد، که اتفاقاً در کد نمونه دو پخش Provider و Attach مخفی شده، تا نمونه ساده تر به نظر برسد (خواص ShowXXXXX را دستکاری کنید تا متوجه شوید.)، قابلیت چند زبانی هم دارد.
در اصل این را فقط برای خودم ساخته بودم، و تا حال هم در اینترنت و به این صورت پک dll عرضه اش نکرده بودم.

متاسفانه وقت نکردم، #C اش را درست کنم و این نمونه VB است، ولی حتماً تا فردا شب نمونه #C اش را هم میگذارم. :11:
ولی بد نیست فعلاً نگاهی بیاندازید، اگر کد را هم متوجه نشدید، حداقل exe اش را میتوانید ببینید...

rapidshare.com/files/133178624/SqlConnectionString.zip



رفتم دیدم ولی نمی شه که اونو از application تغییر داد ! اصلا enable نیست توی properties window !

متوجه شدم مشکل کجاست، چون من خودم زیاد از امکانات TypedDataSet استفاده نمیکنم، برای همین تا حال هم به همچین مشکلی برنخورده بودم!!!!
چون شما از DataAdapter های موجود در TypedDataSet استفاده میکنید و چون این DataAdapter ها یا باید ConnectionString مستقیم داشته باشند یا از Settings تغذیه شوند، برای حالتی که نیاز به کمترین میزان تغییرات باشد، پیشنهادم این است:
شما یک Item دیگر از نوع String به Settings اضافه کنید، که این ایتم وظیفه Save و نگه داری طولانی مدت ConnectionString را بر اهده دارد (چه معمولی و چه اگر خواستید رمزگذاری شده برای از دست نرفتن password و...)، بعد هر زمان برنامه اجرا میشود در مراحل اولیه، مقدار این Item جدید را در Item اصلی که DataAdapter ها به آن وصل هستند، میریزید.
با دستور زیر میتوان به صورت موقت و تا زمانی که برنامه اجرا میشود مقدار یک item از نوع application را دستکاری کرد.

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

این کار یک مزیت دیگر هم بجز کمترین دستکاری کد دارد و آن در لحظه ای است که کاربر در پنجره تنظیمات ConnectionString را تغییر میدهد و شما نظیر آن، فقط آیتم String که مسئول Save است را ویرایش میکنید، تا برنامه دچار دوگانگی نشود، و اگر در جای دیگر Connection ای باز است، برنامه همچنان با ConnectionString قبلی کار کند تا اجرای بعدی ...

نگران نشوید... با نمونه #C که فردا میگذارم، نمونه کد فوق را هم میگذارم.

ngooran
29-07-2008, 09:34
سلام...
من واقعا نمی دونم چطور باید از شما تشکر کنم... واقعا ممنونم :11: :11: :11:
در ضمن من تونستم که sql server رو تنظیم کنم تا به صورت remote کار کنه و با دستکاری connection string به صورت دستی از project->settings از یک کامپیوتر دیگه داخل شبکه با دیتابیس attach شده در کامپیوتر دیگه کار کنم... ممنون...
در مورد این روشی که گفتین هم انجام می دم و خبرش رو بهتون می دم :20:
بازم ممنون...
یه چیزیم بگم؟!
با عرض شرمندگی از rapidshare نتونستم download کنم...
ممنون از لطفتون... منتظر کدتون هستم :20:

_H2_
29-07-2008, 09:44
سلام


با عرض شرمندگی از rapidshare نتونستم download کنم...

من الآن تست کردم، فقط کافیست javascript مرورگر فعال باشد و روی دکمه Free User کلیک کنید، دانلود میشود!؟

ولی چشم، شب نمونه #C را از هاست خودم میگذارم.
مجدداً عضر خواهی میکنم که طول کشید.

ngooran
29-07-2008, 09:52
مشکل از منه که نمی تونم از rapisdshare دانلود کنم چون جایی که کار می کنم همه با یک IP به اینترنت وصل می شن و وقتی یک نفر دیگه از IP شما در حال دانلود باشه دیگه rapidshare اجازه نمی ده دانلود کنیم... اینجا هم که همیشه یکی داره ازش دانلود می کنه :46:
بازم ممنونم... شرمنده کردین... :11:

_H2_
29-07-2008, 18:45
سلام
نمونه مورد نظر را حاضر کردم، نمونه جاری شامل کد VB به همراه #C است.
در این نمونه آیتم با نام ConnectionString در Settings قرار دارد که مسئول تغذیه DataAdapter های Typed است و فقط در زمان اجرای برنامه و چرخه RAM ست شده و مقدار معتبری دارد.

و آیتمی هم با نام CSSave وجود دارد که دخیره طولانی مدت و بین اجرا ها را بر اهده دارد.
یعنی آیتم قبلی مثل RAM است و این یکی مثل Hard !!!!

نکته خاص و مورد توجه ان است که اگر ConnectionString در options تنظیم شود، در اجرای بعدی برنامه استفاده خواهد شد و تا اجرای جاری برنامه، همچنان از مقدار قبلی موجود در آیتم ConnectionString استفاده خواهد شد.
دلیل این کار هم ، در این برنامه درپیت ساده معلوم نمیشود! اگر شما برنامه ای بزرگ و MDI ای داشته باشید، امکان دارد در همان لحظه که ConnectionString در Options شما تغییر داده میشود، در نقاط مختلف برنامه چندین SqlConnection باز برای انواع کارها و رسیدگی ها وجود داشته باشد، که تغییر آنها خیلی سخت و کد زیادی بخواهد و چندان منطقی نباشد، اگر هم بگذاریم فقط SqlConnection های جدید با ارتباط جدید ساخته شوند، اصلاً جالب نیست و بهتر است در هر لحظه تمام Connection ها به یک جا نشانه روی و وصل شده باشند.
پس راه منطقی برای همچین برنامه بزرگی، اعمال تغییرات در Restart بعدی برنامه است.

چون موارد ذخیره شده در Settings اصلاً امن نیستند و کاملاً به صورت متنی و ساده نگاه داشته میشوند، پیشنهاد میشود برای حفظ و حراست از user و pass ارزشمند، مقدار CSSave رمز گذاری شود.
من فقط برای نمونه از رمزگذاری ساده ------ استفاده کردم، که در اصل چندان هم رمزنگاری نیست و خیلی ساده قابل دکد است، ولی این فقط جهت نمونه و با یک خط کد پیاده سازی شده و البته جلوی افراد فضول را از کشف مقدار حقیقی ConnectionString و user و pass میگیرد!

پیشنهاد میکنم برای رمز نگاری محکم تر به تاپیک زیر مراجعه کنید، نمونه کد که رمز نگاری واقعی را در دات نت شامل میشود.
forum.p30world.com/showthread.php?t=244318&page=2

دو مطلب دیگر باقی است!
اول آنکه: اگر مایل بودید میتوانید اجازه تغییر یک سری موارد ConnectionString را به کاربران ندهید.
مثلاً DataBaseName در برنامه فیکس باشد و کاربر نتواند تغییرش دهد و یا حتی برخی دوستان سخت گیر هم به دلیل سادگی برنامه و هم امنیت بیشتر (به تفکر خودشان) User و Pass را هم فیکس میکنند و کاربر فقط و فقط اجازه ادیت نام یا IP سرور را دارد.

بهرحال اینکه کاربر چه حد اختیار در ویرایش ConnectionString دارد به شما بستگی دارد، ولی DataSource حداقل و خط مرزی برنامه باید باشد.

دوم هم: معمولاً اگر برنامه قرار است در شبکه کار کند، Timeout پیش فرض 15 ثانیه، زیاد جالب نیست و شاید با یک سرور شلوغ مشکل ساز شود، در نتیجه پیشنهاد میکنم، یا اجازه ویرایش Timeout را هم در options در نظر بگیرید، یا آن را با مقدار معقول تر و ثابتی فیکس کنید، مثلاً 30 تا 60 شاید بد نباشد.

پرحرفی کافیست! این هم لینک دانلود:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

ngooran
02-08-2008, 11:18
سلام...
خیلی ممنون...
من یه چند روزی نبودم... الان چک می کنم و بهتون خبرشو می دم...

بازم ممنون :11:

M-B-M
12-08-2008, 13:00
ببخشید این تاپیک رو از زیر خاک بیرون کشیدم
من Sql Server Enterprise2000 رو روی سیستمم با تنظیمات پیش فرض نصب کردم حالا زمانی که می خواهم دیتابیسی که با خود C# ساخته ام به SqlServer ، Attach کنم با پیغام خطای
Error 602: Could not find row in sysindexes for database ID 8, object ID 1, index ID 1. Run DBCC CHECKTABLE on sysindexes.
آیا مشکل از نوع Sql و تنظیمات آن است یا مشکل از ایندکس های من است؟

_H2_
12-08-2008, 16:00
سلام
اگر دیتابیس شما با sqlserver2005 (هر نگارشی) تهیه شده باشد،احتمالاً در نسخه 2000 قابل استفاده نیست.

1- بهترین راه ارتقا از 2000 به 2005 است، ضمناً نسخه نهایی 2008 هم آمده، مدتی است میخواهم مطالبی اماده کنم و تاپیکی در مورد ظهور نسخه جدید این نرم افزار قدرتمند بزنم، ولی وقت نمیکنم.

2- آیا نرم افزار Management2005 را دارید؟ شاید راحی وجود داشته باشد، ولی همچنان بر ارتقا به 2005 تاکید میکنم.

M-B-M
12-08-2008, 22:58
سلام
من این دیتابیس را با خود C#2005 تولید کرده ام حالا باید Sql2005 نصب کنم. آیا نسخه VS با نسخه Sql باید یکی باشد

_H2_
13-08-2008, 01:26
سلام

... Sql2005 نصب کنم...اگر بتوانید، ارتقای 2000 به 2005 بهتر است تا اینکه 2005 تان را به 2000 تبدیل کنید.


...آیا نسخه VS با نسخه Sql باید یکی باشد...
نه
sqlserver و vs نرم افزارهایی مجزا هستند.
مهم connectionstring است.

فقط وقتی دیتابیس جدید از داخل خود vs2008 میسازید، حتماً نیاز به وجود sqlexpress2005 دارد. یعنی vs دیتابیس خالی جدید را با express2005 میسازد.

ولی شما میتوانید خودتان هر دیتابیسی را که خواستید استفاده کنید.

M-B-M
24-09-2008, 22:18
سلام
من توی Setting برنامه دو متغیر ConnectionString و CSSave ساخته ام و تمام برنامه را با توجه به برنامه ای که شما نوشته اید ساخته ام.
زمانی که برنامه را اجرا می کنم بطور مثال دو دیتابیس به سرور Attach می کنم، جایی که از دستورات DateReader استفاده می کنم با توجه به مشخصات وارد شده در صفحه Login عمل می کند (از دیتابیس وارد شده در صفحه Login) اما در جایی که از BindingSource و TableAdapter بصورت شی گرا استفاده می کنم (یک DataGride روی فرم قرار داده ام و DataSourse آن را به جدول مورد نظر وصل کرده ام) از همان دیتابیس اولیه استفاده می کند و تغییر DBName در صفحه Login تاثیری روی آن ندارد
چکار باید بکنم تا با توجه به تغییر پارامترهای صفحه login بتوانم برنامه را اجرا کنم.
امیدوارم تونسته باشم سئوالم رو درست توضیح بدم

_H2_
25-09-2008, 21:25
لام
معمولاً در یک پروژه از یک دیتابیس واحد استفاده میکنیم، ولی اگر به هر دلیل نیاز به تغییر نام دیتابیس یا مجوزهای sqlserver پیدا کردید، باید بییید و رشته ConnectionString جدید را با دستورات String ای و + کردن و با مقادیر مطلوب Initial Catalog و User ID و Password مجدداً بسازید و در داخل آیتم ConnectionString بخش Settings بریزید.
چون همه TypedDataAdapter های شما از این آیتم Settings استفاده میکنند، پس اگر این آیتم را خودتان بعد از لوگین تغییر دهید، باید مشکلتان حل شود.

یعنی دیگر CSSave چندان معنی و کاربرد ندارد، چون در هر بار لوگین و با مقادیر پنجره لوگین برنامه، ConnectionString تان باید تغییر کند، دیگر چیزی برای ذخیره در مراجعه بعدی وجود ندارد... هربار باید با مقادیر لوگین بسازیدش.

M-B-M
25-09-2008, 21:48
سلام
من تست کردم مقدار ConnectionString موجود در Setting با توجه به مقادیر وارد شده در صفحه Login تغییر می کند اما مقدار همچنان DataGride مقادیر قبلی را نمایش می دهد!!!

_H2_
25-09-2008, 22:30
سلام
طبیعتاً یک جایی در کدهایتان به جای آیتم ConnectionString درون Settings از چیز دیگری استفاده میکنید.

DataAdapter ای که اطلاعات را پر میکند برسی کنید.

به بخش Settings پروژه مراجعه کنید و مطمئن شوید آیتمیهای موازی دیگری ندارید ...

به TypedDataSet تان در طراحی بروید و خصویت Connection اش را برسی کنید و مطمئن شوید که به آیتم ذکر شده Setting وصل است و مثلاً خودش مستقلاً در همان نقطه متن رشته اتاصل را ننوشته باشد !

یا دقت کنید که در کدهایتان اگر خودتان Connection ای ساخته اید از رشته String صریح یا آیتم دیگری استفاده نکرده باشید.

اگر مشکلتان حل نشد، کل TypedDataSet را که چهار یا پنج فایل متنی است، اپلود کنید.

M-B-M
26-09-2008, 01:26
سلام
اگه که منظورتون DataSet.Designer است که باید بگم، گشتم توش اینو پیدا کردم که بقیه همه از این استفاده می کنند


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

که اینو اینجوری تغییر دادم


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنیداما باز هم تغییری نتیجه اجرای برنامه تغییری نکرد


حالا که از نو DateSet را ساختم (DateSet موجود را Del کردم و یک DataGride روی فرم قرار دادم و از خاصیت DataSource آن New را انتخاب کردم ) متوجه شدم که در این زمان نام سرور و نام دیتابیس و ... را باید Set کنم بعد با این پیغام مواجه شدم


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

و ...
حالا نمی دانم راهی که من انتخاب کرده ام اشتباه است یا اشکال از جای دیگریست؟

لطفا مرا راهنمایی فرمایید.

M-B-M
26-09-2008, 22:41
H2 جان کجایی؟

_H2_
26-09-2008, 23:20
سلام

که اینو اینجوری تغییر دادم
تغییر کدها هیچ فایده ای ندارد، باید در design خصوصیت ها تنظیم کنید، از جمله Connection مربوط به dataadpter
نیازی به ساخت دیتاست جدید هم نبود، فقط کافیست دبل کلیک کنید و در design خواصش را ست کنید.


... با این پیغام مواجه شدم
در این پیغام روی yes کلیک کنید.
ولی حواستان باشد در این شرایط احتمالاً برنامه تان میخواهد یک آیتم جدید به Setting اضافه کنید و احتمالاً میخواهد از MarkazDBConnectionString قدیمی شما استفاده نکند.

M-B-M
27-09-2008, 00:05
تغییر کدها هیچ فایده ای ندارد، باید در design خصوصیت ها تنظیم کنید، از جمله Connection مربوط به dataadpter
نیازی به ساخت دیتاست جدید هم نبود، فقط کافیست دبل کلیک کنید و در design خواصش را ست کنید.


لطفا بیشتر توضیح دهید
در Design جایی برای تنظیم خصوصیت ها ندارد
شما کجا را می فرمایید؟

_H2_
27-09-2008, 01:23
سلام

در Design جایی برای تنظیم خصوصیت ها ندارد

برای TypedDataSet و TypedDataAdapter ....

در VS روی DataSet1.xsd دبل کلیک کنید.
حال باید جدول مورد نظر را به صورت دو قسمتی ببینید.

در بالا خود جدول و فیلدها و در پایین Adapter و متدهایش.
حال روی خود بخش Adapter که معمولاً نوشته TablenameAdapter یک بار کلیک کنید.

الآن باید خواصش در پنجره کمکی Properties لیست شده باشد.
همان اوایل خصوصیت Connection را خواهید دید که اگر کلیکش کنید یک دکمه کوچک ComboBox مانند را نمایش خواهد داد که در لیست ظاهر شده، میتوانید تمام Item های قابل استفاده Settings تان را هم مشاهده کنید.
(تمام مواردی که Type=Connection String و Scop=Appilication)

و در اصل با خصیه فوق میتوانید مشخص کنید این تک TypedDataAdapter تان از چه رشته اتصالی استفاده کند.

M-B-M
27-09-2008, 03:23
سلام
مقدار ConnectionString (TypedDataAdapter ) رو چی باید بذارم
خالی نمیشه گذاشت؛ مقدار هم اگر بدم همیشه از همون استفاده می کنه

M-B-M
27-09-2008, 22:11
H2 جان کجایی

_H2_
27-09-2008, 22:47
سلام

مقدار ConnectionString (TypedDataAdapter ) رو چی باید بذارم
خالی نمیشه گذاشت؛ مقدار هم اگر بدم همیشه از همون استفاده می کنه


H2 جان کجایی
در حال تایپ جفنگیات زیر بودم...!

این مشخصه Connection قابل Bind به Settings است و قاعدتاً باید آیتمی های موجود در Settings را هم در لیست بازشود کامبو مانند خود نشان دهد.
ولی برای نمایش آیتمهای Settings سه شرط دارد.

به ProjectMenu->Properties->Settings مراجعه کنید
1) خصوصیت Type سطر مورد نظر را به Connection String تنظیم کنید.
2) خصوصیت Scop سطر مورد نظر را به Appilication تنظیم کنید.

3)...
باید یک فایل app.config در پروژه و SolutionExplorer داشته باشید.
اگر پیدایش کردید:

بخش زیر را در آن پیدا کنید:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
و مطمئن شوید بخش "providerName="System.Data.SqlClient را دارد.
یعنی متنی شبیه زیر داشته باشید...

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید


اگر فایل app.config را ندارید:
فرمان زیر را پیگیری کنید.
Project->AddNewItem->...Data...->XMLFile
نام app.config را نوشته و OK کنید و متن زیر را در آن تایپ کنید...

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

=====

حال باید بتوانید آیتم مورد نظر Settings خودتان را در لیست کامبو Connection های typeddataadapter تان ببینید.

M-B-M
28-09-2008, 00:55
سلام

نمی دانم من سئوالم را درست مطرح نکردم یا منظورم را اشتباه رساندم؟

ببینید دوست عزیز متغیر MarkazDB که من در Setting ساخته ام و از نوع ConnectionDtring است و Scope آن برابر Applcation است؛ در زمانی که روی TableAadapter کلیک می کنم و خصوصیات آن را باز می کنم، در قسمت Connection متغیر MarkazDB (Setting) آن قابل دسترسی است. اما در زیر مجموعه همان Connection پارامتری به نام ConnectionString وجود دارد که الان مقدار ... دارد و همیشه TableAdapter های من از همین مقدار استفاده می کنند

حالا این پارامتر ConnectionString را چه چیزی باید قرار دهم تا همیشه از Setting برنامه مقدار بگیرد (این پارامتر را خالی نیز نمی توان رها کرد)

ببخشید من اینقدر سئوال می کنم! انشاا... این آخرین پست من در این تاپیک باشد

_H2_
28-09-2008, 11:19
سلام

قسمت Connection متغیر MarkazDB (Setting) آن قابل دسترسی است..
اگر MarkazDB جزء Settings های شما است و گزینه (MarkazDB (Setting را هم در لیست میبینید، همان را انتخاب کنید، باید مشکلتان حل شود.


اما در زیر مجموعه همان Connection پارامتری به نام ConnectionString وجود دارد که الان مقدار ... دارد
اگر مرحله فوق را درست انجام دهید، این مورد در اجرای نهایی برنامه اهمیتی ندارد و نیاز نیست نگران شوید.


...همیشه TableAdapter های من از همین مقدار استفاده می کنند
اگر موارد فوق را درست انجام دهید TableAdapter شما همیشه باید از مقدار MarkazDB در بخش Setting استفاده کند.
و با تغییر MarkazDB باید TableAdapter شما متأثر شود.
در نهایت دقت کنید که پروژه کامل و بدون خطا کامپایل شود. Build->Rebuild Solution



گرچه از گفته های فوق اطمینان دارم ولی مجدداً خودم تست خواهم کرد.

=====


ببخشید من اینقدر سئوال می کنم
برای من به شخصه فرقی ندارد اگر بتوانم و سوادم اجازه دهد، در تاپیک قدیم تر شما کمک کنم یا در تاپیک جدید فرد دیگری.... !؟
برای شما فرقی دارد؟!


انشاا... این آخرین پست من در این تاپیک باشد
من هم امیدوارم زودتر به آخرین پستتان در تاپیک برسیم، ولی از جهت اینکه مشکل شما با یک مسئله کوچک در برنامه نویسی رفع شده.
انشا ا... اصلاً دیگر به مشکلی در برنامه نویسی برخورد نکنید که نیاز به پرسیدن سوال در تاپیک های سایت داشته باشید.
ولی اگر مشکلی داشتید ... همیشه بروبچ ی در انجمن جهت کمک هستند.

=====

موفق باشید.

M-B-M
28-09-2008, 14:34
سلام
من برای اینکه تست کنم که این متغیری که در لیست بازشو وجود دارد (MarkazDB (setting)) آیا همان پارامتر موجود در Setting است؛ نام این متغیر را از داخل Setting تغییر دادم و ConnectionString گذاشتم اما زمانی که به DataSet رفتم تا Connection TableAdapter را Set کنم دیدم این متغیر در لیست وجود ندارد و همان متغیر قبلی MarkazDB وجود دارد در حالی که این متغیر دیگر وجود ندارد
بعد رفتم و فایل App.Config را باز کردم و آن را به این شکل تغییر دادم


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنیدچون متغیر CSSave در Setting وجود دارد هر بار که وارد می شوم برای Update سئوال می شود و قسمت CSSave در App.Config ساخته می شود.



مقدار این قسمت رو چی باید قرار بدم؟
" connectionString="CONNECTIONSTRING



الان من دو متغیر در Setting دارم:
Name: ConnectionString, Type: ConnectionString, Scope: Application
Name: CSSave, Type: String, Scope: User


نمی دانم اشکال کار از کجاست؟

_H2_
28-09-2008, 23:23
سلام

گرچه از گفته های فوق اطمینان دارم ولی مجدداً خودم تست خواهم کرد

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
اگر شبیه کد فوق را اجرا کنید، خواهید دید که s1 با s2 تفاوت دارد.
یعنی DataAdapter جدید ساخته شده از آخرین مقدار ست شده استفاده کرده.


مقدار این قسمت رو چی باید قرار بدم؟
" connectionString="CONNECTIONSTRING

مقدار جاری در همان Settings که برابر با مقدار فعی رشته اتصال شما است.



الان من دو متغیر در Setting دارم:
Name: ConnectionString, Type: ConnectionString, Scope: Application


app.config را چینین اصلاح کنید.

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

حال باید آیتم مورد نظر را خود را در لیست کامبو خصیصه گفته شده ببینید.
و میتوانید مثل نمونه کد اول همین پست این مقدار را در runtime ویرایش کنید و مطمئن باشید که تمام TypedDataAdapter ها که از این آیتم Settings استفاده میکنند و بعد از لحظه تغییر new شده اند با مقدار جدید کار خواهند کرد.

_H2_
28-09-2008, 23:34
سلام مجدد...
راستی، پیشنهاد من برای ایجاد CSSave برای زمانی بود که قرار بود برنامه تان با یک دیتابیس مشخص کار کند و کاربرانتان هم بتوانند از طریق پنجره Options خود برنامه تان رشته اتصال را تغییر دهند، تا تمام اجزای برنامه در دفعه بعد که اجرا میشود، به صورت خودکار با رشته اتصال جدیدب ه بانک وصل شود.

اگر طبق پست 28:


زمانی که برنامه را اجرا می کنم بطور مثال دو دیتابیس به سرور Attach می کنم، جایی که از دستورات DateReader استفاده می کنم با توجه به مشخصات وارد شده در صفحه Login عمل می کند (از دیتابیس وارد شده در صفحه Login) اما در جایی که از BindingSource و TableAdapter بصورت شی گرا استفاده می کنم (یک DataGride روی فرم قرار داده ام و DataSourse آن را به جدول مورد نظر وصل کرده ام) از همان دیتابیس اولیه استفاده می کند و تغییر DBName در صفحه Login تاثیری روی آن ندارد

میخواهید برنامه در هر اجرا به وسیله یک پنجره Login بتوانید به دیتابیسهای مختلف و احتمالاً با User و password های مختلف وصل شود، همانطور که در پست 29 اشاره کردم، (یاد آوری میکنم) پس ذخیره رشته اتصال برای اجرای بعدی بی معنی است و شاید بهتر باشد کلاً CSSave و بخش کدهای مربوطه اش را حذف کنید.

M-B-M
29-09-2008, 00:29
سلام
H2 جان دستت درد نکنه

کل dataSet را دوباره از اول ساختم مشکل حل شد.

ببخشید خیلی زحمت دادم. انشاا... که بتونم زحماتت رو جبران کنم
باز هم ممنون