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

[ + افزودن آگهی متنی جدید ]




صفحه 1 از 2 12 آخرآخر
نمايش نتايج 1 به 10 از 17

نام تاپيک: مشکل در تنظیمات شبکه برای اتصال چند سیستم با SQLEXPRESS

  1. #1
    اگه نباشه جاش خالی می مونه MTPROG's Avatar
    تاريخ عضويت
    Sep 2007
    محل سكونت
    شهر 3500 ساله
    پست ها
    432

    پيش فرض مشکل در تنظیمات شبکه برای اتصال چند سیستم با SQLEXPRESS

    یک برنامه با SQLEXPRESS طراحی شده میخوام دو نسخه از این برنامه رو توی دوتا سیستم اجرا کنم که یکیشون بدون بانک اطلاعاتی است و اطلاعاتشو از سیستم اولی بگیرو
    شبکه بصورت WORKGROUP کار میکنه
    IP کامپیوتر اصلی که دارای بانک اطلاعاتی هست برابر است با ip=10.0.254.62
    IP کامپیوتر فرعی بدون بانک اطلاعاتی برابر است با ip=10.0.254.68

    برنامه رو در دو نسخه با Connection String ثابت و متغیر طراحی کردم

    Connection String ثابت(کامپیوتر سرور)
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    Connection String متغیر(کامپیوتر کلاینت)
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    الان برای کامپیوتر سرور مشکلی نیست اما مشکل برای کامپیوتر کلاینت پیش میاد
    در هنگام اجرا این پیغام خطا رو میده
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    هر دو سیستم همدیگر رو میبینن و در ارتباط شبکه مشکلی نیست

    در تنظیمات SQL Server Surface Area Configuration هر دو سیستم روی بخش Using both TCP/IP And named pipes تنظیم شده است

    در تنظیمات SQL Server Configuration Manager هر دو سیستم SQLEXPRESS)SQL Server) و SQL Server Browser در حالت Run و بر روی مد NetworkService می باشند

    از دوستانی که اطلاعاتی در این مورد دارند ممنون میشم راهنمایی کنن

    با تشـــــــــــــــــــــــ ــــــــکر

  2. #2
    ناظر انجمن .NET Framework _H2_'s Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    یک جایی بین Framework و نارمک!
    پست ها
    4,746

  3. #3
    اگه نباشه جاش خالی می مونه MTPROG's Avatar
    تاريخ عضويت
    Sep 2007
    محل سكونت
    شهر 3500 ساله
    پست ها
    432

    پيش فرض

    من نحوه attach کردن رو میدونم ولی آخه من از SQLEXPRES خود VS2008 استفاده کردم چطور اونو attach کنم در حالی که برنامه ای برای attach وجود نداره.
    یعنی باید روی سرور حتما SQl SERVER 2005 نصب باشه؟
    Last edited by MTPROG; 19-05-2009 at 08:59.

  4. #4
    ناظر انجمن .NET Framework _H2_'s Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    یک جایی بین Framework و نارمک!
    پست ها
    4,746

    پيش فرض

    سلام
    attach راه استاندارد ارتباط sqlserver است و نسخه express هم از این امر مثتثنی نیست.
    (در واقع sqlserver اصلاً بدون attach کار نمیکند، نسخه express هم که به ظاهر چشمی میتواند اینکار را انجام دهد، در اصل نوعی attach کاملاً رسمی و قانونی و معمولی را خودکار انجام میدهد ولی موقت، یعنی خودش detach را هم انجام میدهد.)

    استفاده از express در شبکه کاملاً عملی و attach هم در همه نسخه های sqlserver قابل انجام است.

    (البته شاید نیاز باشد برخی پروتکلها را هم برای express فعال کنید تا در شبکه کار کند.)

  5. #5
    اگه نباشه جاش خالی می مونه MTPROG's Avatar
    تاريخ عضويت
    Sep 2007
    محل سكونت
    شهر 3500 ساله
    پست ها
    432

    پيش فرض

    مشکل ارتباط رو حل کردم شبکه رو تبدیل به Client/Server کردم و بعد از تنظیمات شبکه بانک رو تو سرور بعد از نصب SQL SERVER 2005 تونستم Attach کنم و با تنظیم Connection String برنامه Client برنامه شروع به کار کرد

    حالا میخواستم روی نحوه قفل کردن یک جدول و یا یک رکورد بحث کنیم

    برای قفل کردن یک جدول زمانی که از یک SqlDataAdapter استفاده می کنم زمانی که میخوام عملیاتی روی بانک اعمال کنم از دستور زیر استفاده کردم
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    آیا این روش درسته؟
    برای قفل روی یک رکورد باید چار کرد؟
    اگر از روش زیر برای اصلاح استفاده شودن ایا قفل زیر درست است
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    Last edited by MTPROG; 20-05-2009 at 09:32.

  6. #6
    ناظر انجمن .NET Framework _H2_'s Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    یک جایی بین Framework و نارمک!
    پست ها
    4,746

    پيش فرض

    سلام
    قف شما مطلقاً فاقد ارزش است.
    الآن که اصلاً بود و نبودش تاثیری ندارد!
    فوق فوقش در شرایطی که فقط و فقط در سطح کل برنامه یکبار new داشته باشید، میتواند در همان نسخه اجرای برنامه تاثیر داشته باشد و بازهم هیچ تاثیری روی دیگر رایانه های شبکه ندارد.

    بانک اطلاعاتی sqlserver خودکار و در صورت تشخیص قفلهایی برای کارکرد صحیح تخصیص/آزاد میکند.
    در شرایط عادی، شما نیازی نیست کاری کنید.

  7. #7
    اگه نباشه جاش خالی می مونه MTPROG's Avatar
    تاريخ عضويت
    Sep 2007
    محل سكونت
    شهر 3500 ساله
    پست ها
    432

    پيش فرض

    یعنی اصلا احتیاجی نیست هیچ کدی نوشته شود؟

    در صورت برخورد SQL SERVER چه عکس العملی نشون میده پیغام خطا میفرسته یا کاربر رو منتظر نگه میداره؟

  8. #8
    ناظر انجمن .NET Framework _H2_'s Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    یک جایی بین Framework و نارمک!
    پست ها
    4,746

    پيش فرض

    سلام
    اگر sqlserver صلاح بداند خودش سطر مورد نظر را قفل میکند، و تا زمان قفل بقیه پردازشها منتظر خواهند ماند.
    ولی این قفل بسیار کوتاه است و فوراً اخذ و فوراً آزاد میشود.

    در یک برنامه شبکه ای شما باید بیشتر به primarukey ها دقت کنید...
    حتماً primarykey ها را autonumber قرار دهید ...
    insert های عادی احتمال دارد به علت duplicate کلید با مشکل مواجه شوند و فرد دیگری زودتر آن کلید را درج کند...
    به این فکر کنید که هر دیتایی از زمان انتخاب قبلی تا بعدی، شاید توسط کاربر دیگری حذف یا ویرایش شده باشد...
    و...

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

  9. #9
    اگه نباشه جاش خالی می مونه MTPROG's Avatar
    تاريخ عضويت
    Sep 2007
    محل سكونت
    شهر 3500 ساله
    پست ها
    432

    پيش فرض

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

    من فکر میکنم بهتره که قبل از اینکه کاربر عملیات update رو انجام بده یک نوشته بشه که رکورد مورد نظر رو چک کنه که ببینه تغییر کرده یا نه و بعد عملیات refresh رو انجام بده!


    نظر شما چیه؟

  10. #10
    ناظر انجمن .NET Framework _H2_'s Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    یک جایی بین Framework و نارمک!
    پست ها
    4,746

    پيش فرض

    سلام
    من فکر میکنم بهتره که قبل از اینکه کاربر عملیات update رو انجام بده یک نوشته بشه که رکورد مورد نظر رو چک کنه که ببینه تغییر کرده یا نه و بعد عملیات refresh رو انجام بده
    اگر منظورتان را از referesh درست متوجه شده باشم و منظورتان یک عملیات SELECT پس از UPDATE باشد...


    اگر شما update ای انجام دهید، یک عدد int به شما داده خواهد شد، که معرف تعداد سطرهایی است که توسط این دستور در بانک تغییر کرده اند.
    (
    البته دقت کنید که اگر از DataTable و DataAdapter استفاده مکنید و چیزی را در DataTable تغییر دهید و لی DataAdapter.Update صفر سطر را آپدیت کند، یک خطای runtime صادر میشود که باید به درستی هندلرش کنید.
    )


    در استفاده از DataTable و DataAdapter ...
    مهم برای SELECT پس از UPDATE آن است که چند سطر DataTable تغییر کره و چند سطر Update شده.
    در یک حالت خوب میانه SELECT باید موقعی انجام شود که دو عدد فوق برابر نباشند.

    ولی اگر خیلی میخواهید مطمئن باشید اطلاعات نمایشی به روز هستند و جدیدترین تغییرات را در سطح بانک نمایش میدهند...
    - یا همیشه باید SELECT داشته باشید.
    - یا SP های شما در sqlserver با تغییر سطری از یک جدول یک سطر خاص در جدول دیگری را با تاریخ-زمان آن لحظه ست کنند...
    تا کلاینتها با چک کردن این عدد با آخرین مقدار در زمان SELECT خودشان بفهمند که نیاز به هزینه پردازشی و ترافیکی شبکه به یک SELECT دارند یا خیر
    (البته میتوانید به جای تاریخ-زمان از فیلدهای timestamp هم استفاده کنید)

    موفق باشید.

صفحه 1 از 2 12 آخرآخر

Thread Information

Users Browsing this Thread

هم اکنون 1 کاربر در حال مشاهده این تاپیک میباشد. (0 کاربر عضو شده و 1 مهمان)

User Tag List

قوانين ايجاد تاپيک در انجمن

  • شما نمی توانید تاپیک ایحاد کنید
  • شما نمی توانید پاسخی ارسال کنید
  • شما نمی توانید فایل پیوست کنید
  • شما نمی توانید پاسخ خود را ویرایش کنید
  •