PDA

View Full Version : استفاده از برنامه به صورت مولتی یوزر



SamStar
سه شنبه 03 اردیبهشت 1392, 00:46 صبح
سلام .
من برنامه ای با C#‎ به صورت ویندوزبیس نوشتم ، دیتابیسش هم sqlserver 2008 هست ، حالا معلوم شده که این برنامه باید به صورت مولتی یوزر استفاده بشه . یعنی همزمان چندتا کاربر از طریق کامپیوترهایی که شبکه هستند ، باهاش کار کنند و اطلاعات در یک دیتابیس ثبت بشه .
چه تغییراتی باید اعمال کنم که همه کاربرها بتونن از یک db استفاده کنن ؟

mohammad2407
سه شنبه 03 اردیبهشت 1392, 02:09 صبح
شما میتونید دیتابیس به اشتراک بزاری برای n کامپیوتر که کار بسیار اسونی هم هست باید ای پی سرور در connectionString ست کنی .

ولی روش بالا برنامه نویسی تحت شبکه نیست .

در روش بالا احتمال خطا در برنامه به صورت هم زمان وجود داره یعنی دو تا یوزر با هم روی یک تیبل کار کنن و یا با هم و در یک زمان اطلاعات ثبت کنن

روش درست کلا فرق میکنه که بهش میگن برنامه نویسی شبکه با روش بالا نمیگن برنامه نویسی شبکه

اگر یوزر های شما همزمان باید کار کنن که باید برید سراغ برنامه نویسی تحت شبکه ولی اگر به صورت جدا هست میتونید دیتابیس به اشتراک بگذارید .

ASKaffash
سه شنبه 03 اردیبهشت 1392, 07:15 صبح
سلام
خیلی بستگی به معماری بانک اطلاعاتی شما دارد مثلا اگر کلیدهای اصلی جداول بصورت اتوماتیک توسط بانک اطلاعاتی تولید می شود موضوع تقریبا بدون اشکال است ولی اگر کلید را خودتان با n+1 تولید می کنید باید مراقب همزمانی باشید

SamStar
شنبه 07 اردیبهشت 1392, 00:37 صبح
کلید ها به صورت خودکار تولید میشه ، پس مشکلی پیش نمیاد برای اجراش ؟

اونوقت برای ساخت setup از پروژه لازم نیست دیتابیس رو هم اضافه کنم و sql در کامپیوترهای مقصد نصب باشه ؟ فقط روی یکی از کامپیوترها اس کیو ال نصب باشه و آی پی اون رو در کانکشن استرینگ بزارم کافیه ؟

میشه لطفا یک نمونه از کانکشن استرینگ رو بزارید ببینم چه جوری باید تغییرش بدم

ممنون

ASKaffash
شنبه 07 اردیبهشت 1392, 07:20 صبح
سلام
فقط در سرور SQL نصب باشد کافی است Client ها فقط فریم ورک لازم دارند :
نمونه ConnectionString برای شبکه :
Data Source=YourIP;Initial Catalog=YourDB;Persist Security Info=True;User ID=YourUser;Password=YourPass

SamStar
شنبه 07 اردیبهشت 1392, 21:48 عصر
دوست عزیز من کانکشن استرینگ هام رو بصورت زیر ست کردم :
در قسمت app.config :
connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|datadirector y|\db\project1db.mdf;Initial Catalog=project1db;Integrated Security=True"

و کانکشن استرینگ برای اتصال به دیتا بیسم در قسمت command :
SqlConnection cn = new SqlConnection(@"Data Source=.\SQLEXPRESS;Initial Catalog=project1db;Integrated Security=True");

اما وقتی ازش ستاپ میسازم و روی یک کامپیوتر دیگه نصب میکنم این ارور رو میده :
can not open database "projectdb" requested by the login . The login failed.
Login failed for user "ZYZY-PC\ZYZY

مشکلش چیه ؟

FastCode
یک شنبه 08 اردیبهشت 1392, 00:09 صبح
Integrated Security=True
این دستور اضافست.
و همونطور که گفته شد باید نام کاربر و رمز ورود رو تعیین کنید.
SQL Server باید در حالت Mixed Authentication Mode تنظیم شود.

ASKaffash
یک شنبه 08 اردیبهشت 1392, 07:08 صبح
سلام
ConnectionString شما برای ارتباط شبکه ای نیست و باید عوض کنید

SamStar
یک شنبه 08 اردیبهشت 1392, 22:35 عصر
دوست عزیز من کانکشن استرینگ هام رو بصورت زیر ست کردم :
در قسمت app.config :
connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|datadirector y|\db\project1db.mdf;Initial Catalog=project1db;Integrated Security=True"

و کانکشن استرینگ برای اتصال به دیتا بیسم در قسمت command :
SqlConnection cn = new SqlConnection(@"Data Source=.\SQLEXPRESS;Initial Catalog=project1db;Integrated Security=True");

اما وقتی ازش ستاپ میسازم و روی یک کامپیوتر دیگه نصب میکنم این ارور رو میده :
can not open database "projectdb" requested by the login . The login failed.
Login failed for user "ZYZY-PC\ZYZY

مشکلش چیه ؟

ببخشید دوستان من این کانکشن استرینگ رو توی سیستم خودم مینویسم اجرا میشه اما وقتی از برنامه ام ستاپ میسازم و روی یک سیستم دیگه (ZYZY-PC) اجرا میکنم اجرا نمیشه .
جدای از شبکه شدن کامپیوترها که مشکل اصلیمه مگه این کانکشن استرینگ نباید روی همه سیستم ها کار کنه ؟

FastCode
یک شنبه 08 اردیبهشت 1392, 22:43 عصر
سیستم خودتون با سیستم کاربر فرق داره.
میخواهید کار کنه یا میخواهید کار خودتون رو بکنید؟

SamStar
یک شنبه 08 اردیبهشت 1392, 23:37 عصر
میخوام نسخه ستاپیش رو تحویل بدم .
یکی از کامپیوتراشون به عنوان سرور استفاده میشه و بقیه به دیتابیس اون کامپیوتر وصل میشن .

این کانکشن ها رو برای تست روی کامپیوتر خودم و یه لپتاپ دیگه تست کردم که فردا نسخه ستاپیش رو بدم نصب کنن اصلا اجرا میشه یا نه تا بعد برسیم به اجراش روی شبکه یعنی یه نسخه باید بدم به رییس که بررسی کنه یه نسخه هم روی کامپیوترهاشون نصب کنم.
هیچ کدومشون کار نمیکنن :(

حالا اگه موضوعاتش خیلی فرق دارن لطفا همون اجرا روی شبکه اش رو برام توضیح بدین

SamStar
یک شنبه 08 اردیبهشت 1392, 23:49 عصر
Integrated Security=True
این دستور اضافست.


وقتی حذفش میکم این ارور رو میده Login failed for user ''. The user is not associated with a trusted SQL Server connection.

FastCode
دوشنبه 09 اردیبهشت 1392, 00:49 صبح
پست ASKaffash رو خوندید؟

User ID=YourUser;Password=YourPass

SamStar
سه شنبه 17 اردیبهشت 1392, 18:46 عصر
دوستان من هم sql ام رو mixed mode گذاشتم هم برای کانکشن استرینگم یوزر پسورد تعریف کردم
اینم کانکشن استرینگمه :

SqlConnection cn = new SqlConnection(@"Data Source=ZY-PC\SQLEXPRESS;Initial Catalog=project1db;
Integrated Security=True;Persist Security Info=True;User ID=ZG;Password=123456789");


اما روی یک کامپیوتر دیه که نصبش میکنم این ارور رو میده :

A Network-related or instance-specific error occured while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections (provider: SQL Network Interfaces , error :26 - Error Locating Server/ Instance Specified)

SamStar
چهارشنبه 18 اردیبهشت 1392, 07:45 صبح
نظری ... راهنمایی ... چیزی ...
پلیــــــــــــــز

FastCode
چهارشنبه 18 اردیبهشت 1392, 08:15 صبح
با SQL Server Configuration Manager
Protocol های Named Pipes و TcpIp رو فعال کنید.
Listen Address های TcpIp رو هم ممکنه نیاز داشته باشید فعال کنید.

SamStar
جمعه 20 اردیبهشت 1392, 19:32 عصر
ممنون دوست عزیز
حالا به سرور وصل میشه ولی میگه : login failed for user ZY-PC\Guest
در صورتی که من یوزرنیم و پسورد براش تعریف کردم و اسکیوال رو هم Mixed mode گذاشتم

FastCode
جمعه 20 اردیبهشت 1392, 20:09 عصر
چه چیزی بین پست های ۵ ۷ و ۱۳ مشترکه؟ و شما سه باز از روش رد شدی؟ و با تمام تاکیدی که من کردم باز هم بهش عمل نمیکنی؟

واقع ترجیح میدادم سینه خیز بیام اونجایی که نصب کردید و بدون کیبورد این تنظیمات رو انحام بدم ولی مجبور نشم این همه توضیح بدم.من به پدرم هم اینقدر یک چیز رو توضیح نمیدم.

SamStar
جمعه 20 اردیبهشت 1392, 20:40 عصر
دوست عزیز گفتم که برای کانکشن استرینگم یوزر پس تعریف کردم
کانکشن استرینگم عینا مثل پست 5 هستش
Integrated security نداره
SQL Server هم در حالت Mixed Authentication Mode است
توی پست قبلیم هم گفتم

دیگه چیز مشترکی تو این پستا هست که من نمیبینم ؟

FastCode
جمعه 20 اردیبهشت 1392, 20:52 عصر
قبل از Open بنویسید

System.Windows.Forms.MessageBox.Show(MyConnection. ConnectionString);
به جای Myconnection اسم شی Connection تون رو بزارید.و متنی رو که در پیغام میاد عینا کپی کنید اینجا.

SamStar
جمعه 20 اردیبهشت 1392, 21:00 عصر
Data Source=192.168.1.52;Initial Catalog=project1db;Persist Security Info=True;User ID=ZG;Password=123456789;

FastCode
جمعه 20 اردیبهشت 1392, 21:04 عصر
با Integrated Security=False هم آزمایش کنید.

SamStar
شنبه 21 اردیبهشت 1392, 20:04 عصر
دیشب تو خونه تونستم روی لپتاپ هام رو با روش بالا ریموت کنم و امروز خوشحال و خندان رفتم شرکت و تمام موارد فوق رو پیاده سازی کردم ولی نشد که نشد که نشد:عصبانی++:
خیلی عجیبه ، تمام موارد رو رعایت کردم حتی فایروال رو هم بستم گفتم شاید پورت رو ببنده ولی درست نشد
ارورشم این بود :

Named Pipes Provider, error: 40 – could not open a connection to SQL server

Tcp\IP و Named Pipe رو هم Enable کردم پورتشم 1433 گذاشتم
Allow remoet هم توی اسکیو ال تیک خورده

توی اینترنت هم هرچی گشتم بجز اینا چیزی پیدا نکردم . به نظرتون مشکل چیه ؟:اشتباه:

FastCode
شنبه 21 اردیبهشت 1392, 21:48 عصر
SqlServer رو بعدش restart کردید؟

SamStar
شنبه 21 اردیبهشت 1392, 21:59 عصر
بله restart هم کردم

FastCode
شنبه 21 اردیبهشت 1392, 22:04 عصر
اگر میتونید با wireshark یا microsoft network analyzer کار کنید سعی کنید ترافیک رو در هر دو سمت بررسی کنید و ببینید که ارتباطی حاصل میشه یا نه.
در ضمن میتونید با netstat وضعیت connection های tcp رو هم بررسی کنید.

aghayex
شنبه 21 اردیبهشت 1392, 22:29 عصر
با سلام خدمت دوستان و شرمنده که قاشق نشسته پریدم وسط بحثتون .
من در حال ساخت یه برنامه تحت شبکه هستم که با ef5 به دیتابیسم وصل می شم از اون طرف دو برنامه تحت شبکه دیدم که در دیتابیس اومده بود یوزر پس تعریف کرده بود و در برنامه در کانکشن استرینگ اون یوزر پس رو داده بود .
در یکی فقط اومده بود یه یوزر تعریف کرده بود در صورتی که برنامه تحت شبکه بود و در یه برنامه دیگه به ازای هر یوزر در برنامه یه یوزر در sql ساخته بود
قضیه این یوزرها چیه ؟

SamStar
یک شنبه 22 اردیبهشت 1392, 10:37 صبح
Fast code جان هستي ؟
من الان شركتم يه برنامه گريد ساده با همون كانكشن استرينگم كه تو برنامه اصليم كار نميكنه نوشتم كار كرد ولي اين برنامه نميدونم چرا كار نمبكنه
داره ديوونم ميكنه
كمك

FastCode
یک شنبه 22 اردیبهشت 1392, 10:47 صبح
تنظیمات connection pooling و این موارد رو که تغییر نداید یک وقت؟

SamStar
یک شنبه 22 اردیبهشت 1392, 10:55 صبح
نه با پولينگش كاري نداشتم حالا اگه لازمه چكش كنم بگو كجاها رو چك كنم

FastCode
یک شنبه 22 اردیبهشت 1392, 11:33 صبح
به نظر من شما کدتون رو بزارید خیلی بهتره.من دیگه مغزم اینطوری جواب نمیده.

mmd2009
یک شنبه 22 اردیبهشت 1392, 11:58 صبح
با سلام

فایلی که ضمیمه کردم قبلا دوستان زحمتش رو کشیدن و اموزش دادن که چطوری به دیتابیس تحت شبکه متصل بشید و تنظیماتش رو گفته. البته کامل نیست ولی خب برای شروع کارتون رو راه میندازه.

SamStar
یک شنبه 22 اردیبهشت 1392, 12:05 عصر
چند صفحه كده. كجاشو بزارم ؟
اون مسيج باكسي كه بالا گفتي رو گذاشتم ببينم اي پي چي نشون ميده
با لوكال هاست نصب شد. البته الان روي سرورم كه وصل شده روي كلاينت ها برام كاربردي نداره پس هيچي
حالا دوباره آي پي گذاشتم و ستاپش رو روي سرو نصب كردم بازم لوكال هاست نشون ميده!!!!!!

SamStar
یک شنبه 22 اردیبهشت 1392, 12:07 عصر
چند صفحه كده. كجاشو بزارم ؟
اون مسيج باكسي كه بالا گفتي رو گذاشتم ببينم اي پي چي نشون ميده
با لوكال هاست نصب شد. البته الان روي سرورم كه وصل شده روي كلاينت ها برام كاربردي نداره پس هيچي
حالا دوباره آي پي گذاشتم و ستاپش رو روي سرو نصب كردم بازم لوكال هاست نشون ميده!!!!!!

ASKaffash
یک شنبه 22 اردیبهشت 1392, 12:09 عصر
سلام
انشاالله که نسخه Enterprise نصب شده و Express نیست.

maalimom
یک شنبه 22 اردیبهشت 1392, 12:23 عصر
سلام دوست عزیز
پیشنهاد میکنم پس از اوین بار اجرای برنامه در کلاینت 4 مقدار ورودی بگیره و در کانکشن استرینگ زیر بزاره و سعی کنه که به بانک وصل بشه
در ضمن بهتره sql server روی سرور نسخه اکسپرس نباشه
یه دیتا بیس اونجا میسازی و در قسمت لاگین یه لاگین یعنی یورز و پس میسازی و تنظیمات دسترسی اون رو admin بزار یعنی اینکه این لاگین بتونه توی همه جدولها ویرایش و اضافه کنه
وقتی داری sql رو نصب میکنی حواست باشه فقط در حالت ویندوز نباشه و حتما هم به کامپیوتر سرور آی پی بدی

Data Source=192.168.0.1;Initial Catalog=DBname;User ID=UserName;Password=Pass
انشاالله که مشکلت حل بشه

شهرهای نقشه ای (http://www.mapcitys.ir)

SamStar
یک شنبه 22 اردیبهشت 1392, 12:51 عصر
نسخه enterprise هست

یعنی شما میگی کانکشن استرینک رو موقع ورود بدم ؟

این مشکل که با اینکه کانکشن استرینگم رو ای پی میدم بازم لوکال هاست نشون میده از ستاپه یا کشی چیزی میشه ؟

ممنون از راهنمایی هاتون
اگه امروز این مشکلم حل بشه حاضزم همه برنامه نویس رو شیرینی بدم

FastCode
یک شنبه 22 اردیبهشت 1392, 12:59 عصر
نسخه enterprise هست

یعنی شما میگی کانکشن استرینک رو موقع ورود بدم ؟

این مشکل که با اینکه کانکشن استرینگم رو ای پی میدم بازم لوکال هاست نشون میده از ستاپه یا کشی چیزی میشه ؟

ممنون از راهنمایی هاتون
اگه امروز این مشکلم حل بشه حاضزم همه برنامه نویس رو شیرینی بدم
مشکل از setting ه.
file ه Settings.cs رو نگاه کنید.

SamStar
یک شنبه 22 اردیبهشت 1392, 14:08 عصر
دوستان انگار داره یه چیزایی میشه :تشویق:
اینکه با وجود تغییرات برنامه ام وقتی ستاپ می سازم و نصب میکنم همون قبلی رو نشون میده از کجاست ؟

این مشکل رو گفتید از ستاپه ؟

NasimBamdad
یک شنبه 22 اردیبهشت 1392, 14:51 عصر
Persist Security Info=True

این چی کار می کنه ؟ به چه دردی می خوره ؟

SamStar
یک شنبه 22 اردیبهشت 1392, 20:10 عصر
Persist Security Info=True

این چی کار می کنه ؟ به چه دردی می خوره ؟

برای امنیت برنامه است و اگر false باشه اجازه نمیده که با user/pass کانکشنت در سورس تغییر ایجاد بشه . فکر میکنم برای وقتی که sql authenticate رو میخوایم استفاده کنیم باید true باشه (البته من حذفش هم کردم مشکلی پیش نیومد )

SamStar
یک شنبه 22 اردیبهشت 1392, 20:17 عصر
دوستان عزیز بخصوص fastcode خیییلی ممنون . بلاخره کارم راه افتاد . از همون اول هم تنظیمات remote sql مشکلی نداشت و مشکل همین بود که نسخه ستاپش رو که میساختم انگار که کش بشه همون برنامه قبلیم رو اینستال میکرد !!!
با گذاشتن MessageBox.Show( cn.ConnectionString) و دادن کانکشن استرینگ دستی که maalimon پیشنهاد داد متوجه مشکل شدم . البته هنوز هم نمیدونم چرا اینجوری میشه ولی بلاخره بعد از 5-6 بار ستاپ ساختن درست شد .
خداخیرتون بده

siavash525
جمعه 27 اردیبهشت 1392, 22:18 عصر
دوستان من تازه رسیدم و امیدوارم شما این پست رو بخونید و بمن خبر بدید که به کجا رسیدید
من در دبی با یک شرکت تولید کننده نرم افزار بعنوتن کارشناس حسابداری همکاری می کردم . نرم افزار تولید شده هم ارتباط شبکه میداد و هم ارتباط اینترنتی . نرم افزار در کامپیوتر سرور نیاز به SqlExpress داره و در کلاینت ها فقط نسخه کلاینت نصب میشه و هرچ نرم افزار جانبی دیگه ای احتیاج نداره . در همه کامپیوتر ها Firewall توسط کلربر غیر فعال میشوند و در کامپیوتر سرور در قسمت Windows firewall with advance security یک Inbound Rules و یک Outbound Rules از نوع پورت با نام و پورتی که از قبل در برنامه شناسایی شده ایجاد میشود و دیگر به هیچ تنظیمی احتیاج نبود . نکته مهم و کلیدی این هست که همه کامپیوترها شبکه باشند و در کامپیوتر های کلاینت تنها در فرمی که مشخصات و نام کامپیوتر سرور و شماره پورت باید تعریفات انجام شود . TCP/IP برای مواقعی فعال میشود که بخواهیم کانکشنی اینترمتی داشته باشیم
الان من خودم در حال نوشتن برنامه ای حسابداری هستم و خودم در همین قسمت اشکال دارم . جهت اطلاع نوشتم که آگاه باشید و به هم اطلاع رسانی کنیم . در ضمن فقط در کامپیوتر سرور sqlexpress نصب میشود . همین
فرم ارتباط به شکل زیر است :
ُServerComputerName\sqlexpress و در خانه بعد پورت وارد میشد