PDA

View Full Version : اتچ کردن ديتابيس در دو برنامه برنامه



Collector
یک شنبه 20 شهریور 1390, 11:28 صبح
سلام

من ميخوام به وسيله دو برنامه به يک ديتابيس متصل بشم.
حالا نميدونم کجاي کانکشن استرينگ رو تغيير بدم . که مشکل پيش نيايد.
من میخوام وقتی دیتابیس اتچ بود دیگه اتچ نکنه که ارور بده . و فقط از دیتابیس استفاده کنه.



static SqlConnection con = new SqlConnection(@"Data Source=.\SqlExpress;AttachDbFilename=|DataDirector y|\X.mdf;integrated security=true;User Instance=True;integrated security=SSPI");

AmirSlash
یک شنبه 20 شهریور 1390, 15:54 عصر
مگه وقتی برنامه اجرا میشه یک Database رو Attach میکنه ؟
اگر میخوای چک کنی که دیتابیس Attach هست یا نه باید از جدول SysObjects استفاده کنی و این به کانکشن ارتباطی نداره

Collector
یک شنبه 20 شهریور 1390, 16:19 عصر
مگه وقتی برنامه اجرا میشه یک Database رو Attach میکنه ؟
اگر میخوای چک کنی که دیتابیس Attach هست یا نه باید از جدول SysObjects استفاده کنی و این به کانکشن ارتباطی نداره

من میخوام با دو برنامه به یک دیتابیس وصل بشم.
حالا باید کانکشن رو طوری تغییر بدم که ارور زیر را برنامه دوم ندهد و هر دو برنامه به دیتابیس متصل شوند.


Cannot open user default database. Login failed. Login failed for user

AmirSlash
یک شنبه 20 شهریور 1390, 17:25 عصر
این Error برای این نیست که دوتا برنامه به یک Database وصل شدن این برای اینکه Connection String اشتاه و یا اینکه User تعریف شده در Connection String بر روی SQL دسترسی نداره

Collector
یک شنبه 20 شهریور 1390, 17:30 عصر
این Error برای این نیست که دوتا برنامه به یک Database وصل شدن این برای اینکه Connection String اشتاه و یا اینکه User تعریف شده در Connection String بر روی SQL دسترسی نداره

ولی اگر فقط یک برنامه اجرا شود مشکلی پیش نمیاید.
ولی هر دو برنامه با این کانکشن استرینگ مشکل پیش میاید . با این وضعیت کجای کانکشن استرینک را باید تغییر بدم.


static SqlConnection con = new SqlConnection(@"Data Source=.\SqlExpress;AttachDbFilename=|DataDirector y|\X.mdf;integrated security=true;User Instance=True;integrated security=SSPI");

seven7777777
یک شنبه 20 شهریور 1390, 19:23 عصر
البته من نمیدونم مشکل از کجاست اما حدس میزنم چون با این یوزر یکبار وصل شدید ، دوباره وصل شدنش داره باعث خطا میده . شما میتونید با یک یوزر دیگه وصل بشید یا نه ؟
همچنین آیا هر دو برنامه روی لوکال هستند یا بانک شما در شبکه قرار داره ؟

Collector
یک شنبه 20 شهریور 1390, 20:39 عصر
البته من نمیدونم مشکل از کجاست اما حدس میزنم چون با این یوزر یکبار وصل شدید ، دوباره وصل شدنش داره باعث خطا میده . شما میتونید با یک یوزر دیگه وصل بشید یا نه ؟
همچنین آیا هر دو برنامه روی لوکال هستند یا بانک شما در شبکه قرار داره ؟

هر دو برنامه به همراه دیتابیس در یک پوشه هست.
لطفا هر کی میتونه راهنمایی کنه. برنامه تقریبا تموم شده فقط مشکل اتصال به دیتابیس هست.

seven7777777
یک شنبه 20 شهریور 1390, 21:14 عصر
oخوب دوست عزیز شما موقعی که کارت توی یک برنامه با دیتابیس تموم شد ، حتما کانکشنتو ببند . بعد برنامه دیگه هم . به هر حال گاها ممکنه دو برنامه همزمان بخوان دسترسی پیدا کنن که این همزمانی هارو باید به دست بگیری و کنترل کنی . فعلا شما کانکشناتو وقتی نیاز داری باز کن و وقتی کارت تموم شد ، حتما ببند .

موفق باشی

Collector
یک شنبه 20 شهریور 1390, 21:41 عصر
oخوب دوست عزیز شما موقعی که کارت توی یک برنامه با دیتابیس تموم شد ، حتما کانکشنتو ببند . بعد برنامه دیگه هم . به هر حال گاها ممکنه دو برنامه همزمان بخوان دسترسی پیدا کنن که این همزمانی هارو باید به دست بگیری و کنترل کنی . فعلا شما کانکشناتو وقتی نیاز داری باز کن و وقتی کارت تموم شد ، حتما ببند .

موفق باشی

دوست عزیز
پس دیتابیس تحت شبکه چطوری کار میکند.
با این سیستم میشه ولی من نمیخوام مشکلی پیش بیاد.

Reza_Yarahmadi
یک شنبه 20 شهریور 1390, 22:55 عصر
گاها ممکنه دو برنامه همزمان بخوان دسترسی پیدا کنن که این همزمانی هارو باید به دست بگیری و کنترل کنی
این کار رو خود SQL Server انجام میده ، اگر هم کاربر بخواد خودش مدیریت کنه باید یک برنامه واسط بنویسه که مابین برنامه اصلی و SQL Server قرار بگیره که مشکلات خاص خودش رو داره.
در تمام نسخه ها غیر از اکسپرس این مشکل میتونه به وجود بیاد ولی در اکسپرس نباید پیش بیاد!!:متفکر:
دیتابیس رو چطور طراحی کردید؟ با استفاده از VS طراحی کردید یا از Management Studio استفاده کردید؟ دیتابیس رو در حالت single user mode قرار دادید؟
یه برنامه ساده دیگه بنویسید و همین مشکل رو اونجا هم بررسی کنید ، در صورتیکه بازم خطا داد برنامه دوم و دیتابیس رو قرار بدید تا شاید بشه فهمید مشکل از کجاست.

Esmail Solhkhah
دوشنبه 21 شهریور 1390, 15:43 عصر
من ميخوام به وسيله دو برنامه به يک ديتابيس متصل بشم.
حالا نميدونم کجاي کانکشن استرينگ رو تغيير بدم . که مشکل پيش نيايد.
من میخوام وقتی دیتابیس اتچ بود دیگه اتچ نکنه که ارور بده . و فقط از دیتابیس استفاده کنه.یه سوال کلیدی رو جواب ندادید :
آیا هر دو برنامه یکی هستند یا اینکه برنامه های متفاوتی هستند ؟

اگه هر دوش یکی بود
شما برا این کار دیتابیس رو به اینستنس پدر اتچ کنید ، حالا یا با کد یا با Management Studio
دیتابیس رو نیاز نیس تو مسیر اجرایی هر دو برنامه بذارید.
کانکشن استرینگ رو تغییر بدید
اگه از SQL SERVER Authentication استفاده میکنید:
Password=123456789;Persist Security Info=True;User ID=sa;Initial Catalog=X;Data Source=.\sqlexpress
اگر هم از Windows Authentication استفاده میکنید

Integrated Security=SSPI;Persist Security Info=False;User ID=sa;Initial Catalog=X;Data Source=.\sqlexpress


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

Collector
دوشنبه 21 شهریور 1390, 18:20 عصر
یه سوال کلیدی رو جواب ندادید :
آیا هر دو برنامه یکی هستند یا اینکه برنامه های متفاوتی هستند ؟
Integrated Security=SSPI;Persist Security Info=False;User ID=sa;Initial Catalog=X;Data Source=.\sqlexpress


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



Directory lookup for the file "C:\Documents and Settings\XX\My
Documents\Visual Studio
2008\Projects\WindowsFormsApplication3\WindowsForm sApplication3\b
in\Debug\M.mdf" failed with the operating system error
5(error not found).
Cannot attach the file 'C:\Documents and Settings\XX\My
Documents\Visual Studio

Esmail Solhkhah
سه شنبه 22 شهریور 1390, 19:26 عصر
نه دو برنامه جداگانه هست یکی سرویس و یکی خود برنامه اصلی .من از این کانکشن استرینگ برای هر دو برنامه استفاده کردم ولی حالا این پیغام را نشان میدهد.



Directory lookup for the file "C:\Documents and Settings\XX\My
Documents\Visual Studio
2008\Projects\WindowsFormsApplication3\WindowsForm sApplication3\b
in\Debug\M.mdf" failed with the operating system error
5(error not found).
Cannot attach the file 'C:\Documents and Settings\XX\My
Documents\Visual Studio


ظاهرا مسیر خیلی طولانیه ، تو یه مسیر ساده تر دیتابیس رو بذارید بعد اتچ کنید.

کد اتچ رو اگه بذارید میشه دقیقتر نظر داد.

موفق باشید.

Collector
یک شنبه 27 شهریور 1390, 00:24 صبح
سلام
اين هم دو برنامه که يکي سرويس هست و دیگری یک برنامه لاگین
که شما بايستي اول سرويس را نصب کنيد و بعد برنامه دوم را در کنار فايل سرويس قرار دهيد که از همان ديتابيس سرويس

استفاده کندو در اين صورت برنامه اين ارور را ميدهد.

اگر تابع InsertToList را کامنت کنيم مشکلي پيش نميايد. من کانکشن رو کلوز کرده ام اما باز مشکل پيش ميايد.


Cannot open user default database. Login failed.
Login failed for user .

Esmail Solhkhah
یک شنبه 27 شهریور 1390, 12:53 عصر
دیتابیس رو بدون استفاده از AttachDbFilename و توسط کد

Create Database dbname For Attacht

یا توسط Management Studio اتچ کنید

ضمنا اگه با کد اتچ کردید تو سرویس یا برنامه یه بار این کار رو بکنید ، یعنی اول چک کنید که دیتابیس قبلا اتچ نباشه بعد اتچ کنید

ضمنا در موقع بکاپ گرفتن اون دایرکتوری 1 روکه تو ریشه درایو C میخاید بکاپ داخلش ریخته بشه بررسی کنید

اگه وجود نداشت ایجادش کنید

و کانکشن استرینگ رو هم یه بار بصورت متغیر عمومی تعریف کنید

موفق باشید.

Collector
دوشنبه 28 شهریور 1390, 11:10 صبح
دیتابیس رو بدون استفاده از AttachDbFilename و توسط کد

Create Database dbname For Attacht

یا توسط Management Studio اتچ کنید

ضمنا اگه با کد اتچ کردید تو سرویس یا برنامه یه بار این کار رو بکنید ، یعنی اول چک کنید که دیتابیس قبلا اتچ نباشه بعد اتچ کنید

ضمنا در موقع بکاپ گرفتن اون دایرکتوری 1 روکه تو ریشه درایو C میخاید بکاپ داخلش ریخته بشه بررسی کنید

اگه وجود نداشت ایجادش کنید

و کانکشن استرینگ رو هم یه بار بصورت متغیر عمومی تعریف کنید

موفق باشید.


سلام

لطفا برنامه Service را اجرا کنید و بعد لیست دیتابیس های اتچ شده را ببینید متوجه میشوید که دیتابیس جزو اتچ شده ها نیست.
ولی این پیغام هنوز در موقع Login نمایش داده میشود.


Cannot open user default database. Login failed.
Login failed for user .

Esmail Solhkhah
دوشنبه 28 شهریور 1390, 11:18 صبح
اینی که فرستادید کد اپلیکیشن هست

سرویس رو نذاشتید

Collector
دوشنبه 28 شهریور 1390, 11:32 صبح
اینی که فرستادید کد اپلیکیشن هست

سرویس رو نذاشتید

سرویس در پست 14 هست من میخواهم آن را اجرا کنم و بعد با این برنامه لاگین کنم.

Esmail Solhkhah
دوشنبه 28 شهریور 1390, 16:56 عصر
سرویس در پست 14 هست من میخواهم آن را اجرا کنم و بعد با این برنامه لاگین کنم.

ببخشید فکر کردم شاید از اون موقع تا حالا تغییراتی توش داده باشید.

چشم بررسی میکنم.

Esmail Solhkhah
دوشنبه 28 شهریور 1390, 17:18 عصر
بنده تست کردم موردی نبود

به پیشنهاد بنده باز عمل نکردید و هنوز دارید از User Instance استفاده میکنید

احتمال قوی هم با کاربر Administrator ویندوز برنامه رو ران میکنید

اون فایلی رو که از مایکروسافت تو تاپیک قبلی تون گذاشته بودم حتما بخونید اگه سیستم بره تو اجرای واقعی تو یه محیطی که اینترنت داره خودتون عملا یه نقطه ورود برا هکرها باز میکنید!

Collector
چهارشنبه 30 شهریور 1390, 23:29 عصر
سلام دوست عزیز

آخرین نسخه سرویس و اپلیکیشن رو تو همون تاپیک آپ کنید و دقیقا بگید مورد چیه و چی میخاید سلام
برنامه رو ضمیمه کردم لطفا اول سرویس را نصب کنید و بعد برنامه WindowsFormsApplication9 را داخل پوشه سرویس را اجرا کنید . برنامه لاگین نمیکند.

و اگر تابع InsertToList را در سرویس کامنت کنیم برنامه لاگین میکند.

Esmail Solhkhah
پنج شنبه 31 شهریور 1390, 11:09 صبح
سلام دوست عزیز

چشم بررسی میکنم ولی تا عصر

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

Esmail Solhkhah
پنج شنبه 31 شهریور 1390, 18:32 عصر
دوست عزیز برنامتون رو اصلاح کردم ، دیگه نباید اصلا موردی داشته باشید (البته اگه بازم برنگردید به روش خودتون)

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



.\sqlexp2005

رو ست کنید به

.\sqlexpress

موفق باشید.

Collector
پنج شنبه 31 شهریور 1390, 20:02 عصر
دوست عزیز برنامتون رو اصلاح کردم ، دیگه نباید اصلا موردی داشته باشید (البته اگه بازم برنگردید به روش خودتون)

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



.\sqlexp2005

رو ست کنید به

.\sqlexpress

موفق باشید.

خیلی متشکرم دوست من

مشکل با لاگین حل شد اما با آدرس های طولانی مشکل دارد را حل چیست؟

Esmail Solhkhah
پنج شنبه 31 شهریور 1390, 20:04 عصر
مشکل با لاگین حل شد اما با آدرس های طولانی مشکل دارد را حل چیست؟

چند کاراکتری ؟

Collector
پنج شنبه 31 شهریور 1390, 20:16 عصر
چند کاراکتری ؟

با این آدرس

C:\Documents and Settings\XXX\My Documents\Downloads\Compressed\900631\Spion\Spion\ bin\Debug

Esmail Solhkhah
پنج شنبه 31 شهریور 1390, 20:18 عصر
سورس پروژتون رو بذارید تو یه مسیر ساده مثلا

C:\Collector

و از اونجا اجرا کنید

در کل سعی کنید از مسیرهای طولانی نه برای SQL SERVER بلکه برای هر نرم افزار دیگه ای استفاده نکنید.

موفق باشید.

Collector
پنج شنبه 31 شهریور 1390, 20:28 عصر
سورس پروژتون رو بذارید تو یه مسیر ساده مثلا

C:\Collector

و از اونجا اجرا کنید

در کل سعی کنید از مسیرهای طولانی نه برای SQL SERVER بلکه برای هر نرم افزار دیگه ای استفاده نکنید.

موفق باشید.

توی اون آدرس خوب اجرا میشه ولی به نظر شکا توی این آدرس مشکلی پیش نمیاد.


C:\Program Files\xxxxxxxxxxxxxx\xxxxxxxxxxxxxx

Esmail Solhkhah
پنج شنبه 31 شهریور 1390, 20:38 عصر
احتمالا درست اجرا بشه

فکر کنم یه محدودیت 128 کاراکتری برا این مورد داشته باشیم

پس سعی کنید از مسیرهای طولانی استفاده نکنید.

Collector
پنج شنبه 31 شهریور 1390, 20:51 عصر
ظاهرا یک بار بیشتر نمیشود و اگر یک بار سرویس را استوپ و بعد اجرا کنیم این پیام را موقع اجرای فرم لاگین نمایش میدهد.


Database 'Ma' already exists. Choose a different database name.

Esmail Solhkhah
پنج شنبه 31 شهریور 1390, 22:56 عصر
کد رو آپتیمایز کردم

بررسی کنید

Collector
جمعه 01 مهر 1390, 00:21 صبح
کد رو آپتیمایز کردم

بررسی کنید

این ارور ها موقع اجرای سرویس


Database 'Ma' already exists. Choose a clifferent clatabase name.


Database 'Ma' cannot be opened clue to inaccessible files or insufficient memory or disk space.

See the SQL Server errorlog for


Cannot open database "MA" requested by the login. The login failed.