PDA

View Full Version : عدم باز شدن دیتابیس در sql 2014 در یک شبکه محلی



iman_esfahani
یک شنبه 26 مرداد 1399, 14:53 عصر
سلام دوستان - بنده یه پروژه انبار به زبان سی شارپ نوشتم و الان هم داره کار میکنه و هیچ مشکلی نداره - فقط میخوام در یه شرکت بصورت شبکه روی همه سیستم ها راه اندازیش کنم - یه سیستم و سرور کردم و تمام مراحل شبکه کردن و انجام دادم و همه هم و میبینن و مشکلی نداره - SQL2014 رو روی سرور نصب کردم و یه Login هم واسش درست کردم - الان وقتی میخوام از طریق کلاینت بهش متصل بشم خطا میده و این متن خطاش هست :

SqlException:
Cannot open database "AnbarDB" requested by the login. The login failed.
Login failed for user 'IMAN_LAPTAB\Iman_Pc'.

این هم کانکشن استرینگ منه :
con = new SqlConnection("Server = 192.1681.20, 1433 ; Network Library = DBMSSOCN ; DataBase = AnbarDB ; User ID = Anbar ; Password = 1234 ");
تست کردم به سرور متصل میشه - یعنی وقتی IP رو تغییر میدم یا یوزر و پسورد و عوض میکنم به سیستم متصب نمیشه - الان تنها مشکل من همینه که چیکار کنم که این ارتباط برقرار بشه - ممنون میشم راهنماییم کنید

iman_esfahani
دوشنبه 27 مرداد 1399, 09:14 صبح
یعنی واقعا کسی نیست که بتونه جواب بنده رو بده ؟؟؟

ROSTAM2
دوشنبه 27 مرداد 1399, 09:43 صبح
سلام. از sql server configuration manager کمک بگیر و پروتوکولی رو که مد نظرت هست و فعال کن و یه Alias بساز و بهش آدرس سیستم دیتای اصلی رو بده. بعد هم نام همون Alias رو بعنوان سیستم دیتا به برنامت معرفی کن (بجای آدرس آی.پی)

iman_esfahani
دوشنبه 27 مرداد 1399, 13:14 عصر
میشه بیشتر راهنمایی کنید ؟ دقیقا از کدوم قسمتش باید این کارها رو انجام بدم

iman_esfahani
دوشنبه 27 مرداد 1399, 13:19 عصر
این Alias که میگین رو روی سرور پیاده سازی کنم یا روی کلاینت ها ؟ و اینکه در قسمت server در هنگام تعریف Alias چه اطلاعاتی رو باید وارد کرد ؟

مهدی کرامتی
دوشنبه 27 مرداد 1399, 17:31 عصر
این طوری که در خط دوم خطا مشخصه:

Login failed for user 'IMAN_LAPTAB\Iman_Pc'.
بواسطه وجود یک عبارت اضافی در کانکشن استرینگ، تلاش بر این است که احراز هویت از طریق Windows Authentication انجام بشه و از اونجایی که کاربر ذکر شده (IMAN_LAPTAB\Iman_Pc) در SQL Server سیستم مقصد بعنوان یک کاربر مجاز تعریف نشده (ضرورتی هم وجود نداره که تعریفش کنید) این پیام خطا رو دریافت می کنید.
یک بار دیگه کانکشن استرینگ رو بررسی کنید و مطمئن شوید که Trusted Connection بعنوان بخشی از کانکشن استرینگ تعریف نشده باشه. همچنین، مطمئن شوید از همین کانکشن استرینگ استفاده می شود (بعضی وقتها در برنامه های Windows Forms خود ویژوال استودیو زمانی که از Server Explorer استفاده می کنید کانکشن استرینگ رو داخل Resource ها قرار میده و از اون استفاده می کنه).
ذکر کردن نام کتابخانه (Network Library = DBMSSOCN) در کانکشن استرینگ هم ضرورتی نداره، مگر موارد خاص. در حالت استاندارد نیازی به ذکر نام کتابخانه نیست، مگر اینکه از ODBC و امثالهم استفاده کرده باشید (که این روزها رایج نیست).

hamidrezax1
دوشنبه 27 مرداد 1399, 20:48 عصر
سلام دوست عزیز همونطور که استاد فرمودن کانکشنتون ایراد داره
این عبارت اصلاح کنید.موفق باشید
152045

iman_esfahani
چهارشنبه 16 مهر 1399, 07:49 صبح
ممنون استاد بابت راهنماییتون ولی من الان دقیق متوجه نشدم باید چیکار کنم ؟ یعنی اون کاربر (IMAN_LAPTAB\Iman_Pc) که موفق نمیشه به سرور متصل بشه رو باید چیکارش کنم ؟ میشه شفاف تر توضیح بدید ؟ یا اگه ممکنه خودتون بی زحمت به کانکشن استرینگ بنویسید ؟ ممنون میشم استاد

iman_esfahani
چهارشنبه 16 مهر 1399, 16:14 عصر
ببخشید استاد من از طریق نصب sql روی سیستم clinet تست کردم و به server تونستم connect بشم و راحت همه اطلاعات و میبینم - پس یعتی ساخت Login و user من مشکلی نداره - ولی از طریق برنامه م در سی شارپ متصل نمیشه و خطا میده - دقیقا موقعی که میخواد پنجره login برنامه باز شه و نام کاربری و پسوردی که کاربر وارد کنه رو چک کنه با این خطا مواجه میشم . من از Entity framwork استفاده کردم - ممنون میشم راهنماییم کنید

مهدی کرامتی
چهارشنبه 16 مهر 1399, 20:25 عصر
ممنون استاد بابت راهنماییتون ولی من الان دقیق متوجه نشدم باید چیکار کنم ؟ یعنی اون کاربر (IMAN_LAPTAB\Iman_Pc) که موفق نمیشه به سرور متصل بشه رو باید چیکارش کنم ؟ میشه شفاف تر توضیح بدید ؟ یا اگه ممکنه خودتون بی زحمت به کانکشن استرینگ بنویسید ؟ ممنون میشم استاد
اگر روی سرورتون اکتیودایرکتوری هست یا یوزر ها تحت دامین هستند میبایست به اون کاربر در SQL Server دسترسی به دیتابیس رو بدهید. در غیر اینصورت، یک یوزر مخصوص در SQL Server تعریف کنید و Username و Password اون رو در کانکشن استرینگ بدهید.

iman_esfahani
شنبه 19 مهر 1399, 10:07 صبح
منم همین کار و کردم و در SQL Server در قسمت security --> Login یه کاربر تعریف کردم و در کانکشن استرینگ هم ازش استفاده کردم - ولی باز هم همون خطا رو میده - بد جوری من و کلافه کرده
این هم تصویر خطایی که بهم میده و کدهایی که استفاده کردم

152286

ROSTAM2
شنبه 19 مهر 1399, 12:36 عصر
سلام به همه.
از server explorer یا SQL Management studio کمک بگیر ببین میتونی با اون نام کاربری به دیتابیس وصل بشی ؟!

iman_esfahani
شنبه 19 مهر 1399, 13:29 عصر
اره با SQL Management studio و همون یوزر پسوورد میتونم کانکت شم و اطلاعات رو هم میتونم با sql روی کلاینت ببینم و فقط مشکل باز شدن دیتابیس از طریق خود برنامه ست

ROSTAM2
یک شنبه 20 مهر 1399, 08:13 صبح
اره با SQL Management studio و همون یوزر پسوورد میتونم کانکت شم و اطلاعات رو هم میتونم با sql روی کلاینت ببینم و فقط مشکل باز شدن دیتابیس از طریق خود برنامه ست
سلام مجدد. کدهات کامل مشخص نیست چی نوشتی اگه میتونی تمام کدهای اتصال به دیتابیست رو پست کن ببینیم. ولی چیزی که هست توی لود فرم اینطور که مشخصه اتصال در ابتدا open و بعد closeشده.

ROSTAM2
یک شنبه 20 مهر 1399, 09:07 صبح
این Alias که میگین رو روی سرور پیاده سازی کنم یا روی کلاینت ها ؟ و اینکه در قسمت server در هنگام تعریف Alias چه اطلاعاتی رو باید وارد کرد ؟

https://www.mssqltips.com/sqlservertip/1620/how-to-setup-and-use-a-sql-server-alias/


(https://www.mssqltips.com/sqlservertip/1620/how-to-setup-and-use-a-sql-server-alias/) توضیحش زمانبره این خلاصه اشه می تونی جای localhost آدرس آی پی که مد نظرته رو بنویسی تا با دیتابیس اون سیستم وصل بشه

iman_esfahani
یک شنبه 20 مهر 1399, 11:34 صبح
https://www.mssqltips.com/sqlservertip/1620/how-to-setup-and-use-a-sql-server-alias/


(https://www.mssqltips.com/sqlservertip/1620/how-to-setup-and-use-a-sql-server-alias/) توضیحش زمانبره این خلاصه اشه می تونی جای localhost آدرس آی پی که مد نظرته رو بنویسی تا با دیتابیس اون سیستم وصل بشه

ممنون بابت راهنمایی ولی باز هم مشکلم حل نشد - نمیدونم چیکار کنم - ممکنه براتون یه شماره تماس بدید که تماس بگیرم با anydesk متصل شید به سیستم من و ببینید مشکلش از کجاست ؟ ممنون میشم

mr.sirwan
یک شنبه 20 مهر 1399, 12:12 عصر
دوست عزیز شما داری از کدوم تکنولوژی استفاده میکنی؟ Ado.net و دستورات command یا داری از دیتاست و linq یا از EF استفاده میکنی؟
توی عکسی که فرستادی توی ایونت FormLoad با اون کانکشن استرینگی که تعریف کردی معلومه که مشکلی برای اتصال به دیتابیس وجود نداشته و فرم لود شده، اما توی یه متد دیگه که داری از لینک استفاده میکنی این ارور رو گرفتی، پس شما یه کانکشن استرینگت رو درست تعریف کردی ولی اونیکی کانکشن استرینگت که linq ازش استفاده میکنه رو هنوز پارامترهاش رو درست تعریف نکردی
بگرد ببین اون دستورات لینک از کجا کانکشن استرینگشون رو میگیرن اون رو درست کن

ROSTAM2
دوشنبه 21 مهر 1399, 12:15 عصر
ممنون بابت راهنمایی ولی باز هم مشکلم حل نشد - نمیدونم چیکار کنم - ممکنه براتون یه شماره تماس بدید که تماس بگیرم با anydesk متصل شید به سیستم من و ببینید مشکلش از کجاست ؟ ممنون میشم

ازین دستور استفاده کن و کانکشن استرینگ هم براش تعریف کن ببینیم خطاش چیه!

command.Text = USE DatabaseName;
using (SqlConnection connection = new SqlConnection(
connectionString))
{
connection.Open();
command.ExecuteNonQuery();
}

iman_esfahani
یک شنبه 09 آذر 1399, 11:21 صبح
دوست عزیز شما داری از کدوم تکنولوژی استفاده میکنی؟ Ado.net و دستورات command یا داری از دیتاست و linq یا از EF استفاده میکنی؟
توی عکسی که فرستادی توی ایونت FormLoad با اون کانکشن استرینگی که تعریف کردی معلومه که مشکلی برای اتصال به دیتابیس وجود نداشته و فرم لود شده، اما توی یه متد دیگه که داری از لینک استفاده میکنی این ارور رو گرفتی، پس شما یه کانکشن استرینگت رو درست تعریف کردی ولی اونیکی کانکشن استرینگت که linq ازش استفاده میکنه رو هنوز پارامترهاش رو درست تعریف نکردی
بگرد ببین اون دستورات لینک از کجا کانکشن استرینگشون رو میگیرن اون رو درست کن

من از روش linq استفاده میکنم - ولی فقط در صفحه لاگینم اتصال به دیتابیس و انجام دادم - الانم هرکاری کردم نتونستم به دیتابس متصل شم - خط دستوری من در هر فرم اینه =
AnbarDBEntities database = new AnbarDBEntities(); و بعد از Query استفاده میکنم واسه همه جستجوها و ویرایش هام - ممنون میشم راهنماییم کنید - چند ماهه سر این قضیه دیگه خسته شدم و پیگیرش نشدم

iman_esfahani
چهارشنبه 12 آذر 1399, 08:17 صبح
اساتید محترم یه سوال برام پیش اومده که ایا مشکلی که دارم به طریق نوع ارتباطی که من برقرار کردم ربط نداره ؟؟ روشی که من استفاده کردم واسه هر فرمی که ساختم در ابتدای اون این خط دستوری و نوشتم و یه ارتباط تعریف کردم از نوع دیتابی بعد از طریق ساخت کوئری 3 عمل حذف ، ویرایش و جستجو رو انجا میدم == AnbarDBEntities database = new AnbarDBEntities();
واسه جستجو = var query = ( from a in database.tbl_setting where a.id==1 select a ); و بعد از if استفاده میکنم که اگر این کوئری خالی نبود یعنی پیدا شده
واسه ویرایش =var query = ( from a in database.tbl_setting where a.id==1 select a ).singleorddefault(); بعد ویرایش انجام میدم
واسه اضافه کردن اطلاعات جدید = tbl_anbar tbl = new tbl_anbar(); بعد tbl.name = textbox1.text اینجوری مقدار دهی میکنم و database.tbl_anbar.add(tbl);
database.savechange(); اینجوری ذخیره میکنمش
این کل روشی هست که من در کل فرمهام ازش استفاده کردم - ممنون میشم یکی از بزرگواران راهنماییم کنه که آیا این روش که من استفاده کردم واسه شبکه مشکل داره ؟ چون در حالت لوکال کار میکنه و هیچ مشکلی نداره
ممنون

mr.sirwan
چهارشنبه 12 آذر 1399, 10:25 صبح
دوست عزیز شما تنها مشکلت همون کانکشن استرینگیه که لینک ازش استفاده میکنه باید اون رو درست کنی حالا بگرد ببین کجا تعریف شده
اگه پیداش نمیکنی یه نمونه پروژه بساز که همچین مشکلی داشته باشه و اینجا آپلودش کن

iman_esfahani
دوشنبه 01 دی 1399, 12:03 عصر
این طوری که در خط دوم خطا مشخصه:

Login failed for user 'IMAN_LAPTAB\Iman_Pc'.
بواسطه وجود یک عبارت اضافی در کانکشن استرینگ، تلاش بر این است که احراز هویت از طریق Windows Authentication انجام بشه و از اونجایی که کاربر ذکر شده (IMAN_LAPTAB\Iman_Pc) در SQL Server سیستم مقصد بعنوان یک کاربر مجاز تعریف نشده (ضرورتی هم وجود نداره که تعریفش کنید) این پیام خطا رو دریافت می کنید.
یک بار دیگه کانکشن استرینگ رو بررسی کنید و مطمئن شوید که Trusted Connection بعنوان بخشی از کانکشن استرینگ تعریف نشده باشه. همچنین، مطمئن شوید از همین کانکشن استرینگ استفاده می شود (بعضی وقتها در برنامه های Windows Forms خود ویژوال استودیو زمانی که از Server Explorer استفاده می کنید کانکشن استرینگ رو داخل Resource ها قرار میده و از اون استفاده می کنه).
ذکر کردن نام کتابخانه (Network Library = DBMSSOCN) در کانکشن استرینگ هم ضرورتی نداره، مگر موارد خاص. در حالت استاندارد نیازی به ذکر نام کتابخانه نیست، مگر اینکه از ODBC و امثالهم استفاده کرده باشید (که این روزها رایج نیست).

ممنون استاد مشکل من حل شد - همین مشکل بود - با وجو تغییر در کانشکن استرینگ باز هم خطا میخورد و از app.config اصلاح کردم و مشکلم برطرف شد .. ممنون از راهنماییتون - سوال دیگه اینکه آیا الان که شبکه شده میشه بصورت اینترنتی دیتابیس و share کرد ؟ یعنی با خرید هاست این کار ممکنه ؟ ممنون میشم راهنماییم کنید

رامین مرادی
چهارشنبه 10 دی 1399, 08:40 صبح
ممنون استاد مشکل من حل شد - همین مشکل بود - با وجو تغییر در کانشکن استرینگ باز هم خطا میخورد و از app.config اصلاح کردم و مشکلم برطرف شد .. ممنون از راهنماییتون - سوال دیگه اینکه آیا الان که شبکه شده میشه بصورت اینترنتی دیتابیس و share کرد ؟ یعنی با خرید هاست این کار ممکنه ؟ ممنون میشم راهنماییم کنید
جسارتا بدترین اشتباه همین کاریه که شما فرمودید. شیر دیتابیس در اینترنت.
رو همون سرور یا سرور جداگانه (بهتره) یه وب سرویس بنویس که درخواست های کاربرا رو دریافت کنه و توی دیتابیس اجرا کنه و نتیجه رو بهشون برگردونه . اینجوری دیگه نیاز نیست پسورد دیتابیست و محل سرور دیتابیست توی برنامه ذکر بشه.
درضمن بین کاربرات و شبکه داخلیت(ری پی ان) بزن حتما. آِی پی ولید رو مستقیم فوروارد نکن رو اس کیو ال.

مهدی کرامتی
پنج شنبه 11 دی 1399, 23:39 عصر
جسارتا بدترین اشتباه همین کاریه که شما فرمودید. شیر دیتابیس در اینترنت.
رو همون سرور یا سرور جداگانه (بهتره) یه وب سرویس بنویس که درخواست های کاربرا رو دریافت کنه و توی دیتابیس اجرا کنه و نتیجه رو بهشون برگردونه . اینجوری دیگه نیاز نیست پسورد دیتابیست و محل سرور دیتابیست توی برنامه ذکر بشه.
درضمن بین کاربرات و شبکه داخلیت(ری پی ان) بزن حتما. آِی پی ولید رو مستقیم فوروارد نکن رو اس کیو ال.
تو بعضی از سناریوها دسترسی به خود دیتابیس یک نیاز اجتناب ناپذیر است، اما اگر چنان نیازی بعنوان الزام وجود نداشته باشه، من هم با ایشان موافق هستم.
دیتابیس رو پشت یک وب سرویس بگذارید و از اون طریق به کلاینت ها دسترسی بدهید. چند سالی هست که GraphQL بعنوان یک تکنولوژی پذیرفته شده وجود داره و به کلاینت ها اجازه میده از طریق متدهای شبیه به SQL از دیتابیس کوئری بگیرند، بدون اینکه واقعا به دیتابیس دسترسی داشته باشند، و بالطبع به دلیل کپسوله شدن دیتابیس در قالب API، امکان افزودن مکانیسم های احراز هویت و کنترل دسترسی هم وجود خواهد داشت.

رامین مرادی
جمعه 19 دی 1399, 23:31 عصر
تو بعضی از سناریوها دسترسی به خود دیتابیس یک نیاز اجتناب ناپذیر است، اما اگر چنان نیازی بعنوان الزام وجود نداشته باشه، من هم با ایشان موافق هستم.
دیتابیس رو پشت یک وب سرویس بگذارید و از اون طریق به کلاینت ها دسترسی بدهید. چند سالی هست که GraphQL بعنوان یک تکنولوژی پذیرفته شده وجود داره و به کلاینت ها اجازه میده از طریق متدهای شبیه به SQL از دیتابیس کوئری بگیرند، بدون اینکه واقعا به دیتابیس دسترسی داشته باشند، و بالطبع به دلیل کپسوله شدن دیتابیس در قالب API، امکان افزودن مکانیسم های احراز هویت و کنترل دسترسی هم وجود خواهد داشت.

ممنون استاد.