PDA

View Full Version : راهنمایی در رابطه با مشکل در Insert و Update به Db در App های تحت شبکه



sirvan-me
جمعه 14 مهر 1391, 12:56 عصر
سلام به همه ی دوستان ... من نرم افزار ی رو نوشتم و می خوام اون رو تحت شبکه اجرا کنم . یعنی یه سری Client برنامه رو اجرا می کنن به سرور متصل میشن ( دیتابیس روی سرور هستش و Client ها از طریق ConnectionString مربوطه به دیتابیس روی سرور وصل می شن ) و می خوان رکوردی رو به جدولی مشخص در دیتابیس اضافه کنن .. می خواستم بدونم اگه هر Client کلید مربوط به خودش رو برای Insert داشته باشه ( کد دانشجویی ) آیا ممکنه مشکلی پیش بیاد ؟!!! ممنون میشم اصولی راهنمایی بفرمائید .

مسعود اقدسی فام
جمعه 14 مهر 1391, 13:11 عصر
منظورتون از هر کلاینت کلید خاص داره یعنی کلید استفاده شده در هر کلاینت مستقل از کلاینت‌های دیگه هستش؟ مثلا یه کلاینت با ۸۹ شروع می‌شه و یه کلاینت ۹۰ و غیره؟

sirvan-me
جمعه 14 مهر 1391, 13:34 عصر
بله دقیقا ... به این خاطر که شماره دانشجویی یونیک هستش و مختص یک نفر و کلید هم اتفاقا تو جدول مربوط همین کد دانشجویی هستش ...

sirvan-me
جمعه 14 مهر 1391, 13:41 عصر
یه سوال دیگه آیا روشی وجود داره که اگر کسی با شماره دانشجویی وارد شد ... دیگه User دیگه ای نتونه با اون کد دانشجویی وارد شه ... اینطوری درصد خطا نزدیک به صفر میشه ... من خودم این به نظرم رسید که تو جدولی که از طریق اون دانشجویان هویتشون شناسایی میشه فیلدی از نوع Bit داشته باشیم اگر User با کد دانشجویی وارد شد .... این فیلد 0 ( false ) بشه یعنی یه جورایی Lock و دیگه کسی نتونه با اون کد وارد شه ... یعنی اول کار ، زمان اهراز هویت برنامه چک کنه این فیلد مقدارش چیه .... نطرتون چیه ؟

به نظرم تنها مشکل اینه که برنامه موقع خروج نتونه مقدار false رو true کنه و اون موقع است که .... STARVATION

ehsan7007
جمعه 14 مهر 1391, 14:04 عصر
راهه خوبیه ، شایدم ایراداتی داشته باشه ؛ می تونید یه فیلد بسازید و توش حالا یا true و false و یا 0 و 1 قرار بدید . مثلا همیشه چک کنه ، موقع ورود یه مقدار رو ثبت کنه و هنگام خروج تغییرش بده .

sirvan-me
جمعه 14 مهر 1391, 17:05 عصر
راهه خوبیه ، شایدم ایراداتی داشته باشه ؛ می تونید یه فیلد بسازید و توش حالا یا true و false و یا 0 و 1 قرار بدید . مثلا همیشه چک کنه ، موقع ورود یه مقدار رو ثبت کنه و هنگام خروج تغییرش بده .

مرسی احسان جان من هم همین و گفتم . در رابطه با سوال اول نظری نداری ؟ یا در رابطه با سوال دوم اگر به دلیلی پروسه مربوط به نرم افزار Kill شد و نتونست مقدار فیلد مربوط رو Reset کنه اونوقت باید چه کار کرد ؟!!!! به نظرت میشه یک App دیگه به صورت کنترلی ساخت که مثلا هر 10 دقیقه بیاد پروسه نرم افزار رو چک کنه اگر اجرا نبود فیلدی که مشخصه رو Reset کنه ... از لحاظ کاربری هم مشکلی فکر نکنم داشته باشه ... به خاطر اینکه اجرای App اول به صورت Single با Mutex کنترل میشه ....

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

ehsan7007
جمعه 14 مهر 1391, 17:25 عصر
خب اگر بخوای می تونی چک کنی که اگر برنامه بسته بود فیلد ها رو Reset کنه:

if (Process.GetProcessesByName("نام برنامه اصلی").Length > 0)
{
برنامه باز است //

}

else
{
دستور برای ریست کردن فیلد ها //
}



می خواستم بدونم اگه هر Client کلید مربوط به خودش رو برای Insert داشته باشه ( کد دانشجویی ) آیا ممکنه مشکلی پیش بیاد ؟!!!
چی بگم ؟! اخه تا حالا باهاش برخورد نکردم !




موفق باشید.

veniz2008
جمعه 14 مهر 1391, 18:00 عصر
سلام. منظورتون از اینکه مشکلی پیش بیاد چی هستش؟یعنی داده تکراری درج بشه؟(که با وجود داشتن کلید در جدول عملا غیر ممکن هستش که چنین اتفاقی بیفته).اگر هم مورد دیگه ای هست بیشتر توضیح بدید.

sirvan-me
سه شنبه 18 مهر 1391, 10:37 صبح
سلام. منظورتون از اینکه مشکلی پیش بیاد چی هستش؟یعنی داده تکراری درج بشه؟(که با وجود داشتن کلید در جدول عملا غیر ممکن هستش که چنین اتفاقی بیفته).اگر هم مورد دیگه ای هست بیشتر توضیح بدید.

جواب سوال اولم رو گرفتم ... در رابطه با سوال دومم می تونید راهنمایی کنید ؟ ممنون

veniz2008
سه شنبه 18 مهر 1391, 12:14 عصر
جواب سوال اولم رو گرفتم ... در رابطه با سوال دومم می تونید راهنمایی کنید ؟ ممنون
یه ایده میتونه این باشه : یه جدول موقت در sql ایجاد کن و آی دی کاربر و وضعیت آنلاین بودنش رو ذخیره کن(مثلا true برای آنلاین بودن). لحظه خروج هم مقدارش رو false کن. حالا اگه بهر دلیلی برنامه ناخواسته بسته شد اون جدول موقت هم از بین میبره. ولی این مورد رو مد نظر داشته باش که اگه قبلا جدول موقت ایجاد شده بود دیگه جدولی ایجاد نکنی. لینک زیر شاید بتونه درباره طریقه ساخت جدول موقت در sql کمکت کنه.
یه لطفی کن نتیجه کار رو توی همین تاپیک اعلام کن تا مورد استفاده همه باشه.
http://barnamenevis.org/showthread.php?178939-%D8%B3%D8%A7%D8%AE%D8%AA-%D8%AC%D8%AF%D9%88%D9%84-%D9%85%D8%AC%D8%A7%D8%B2%DB%8C-%D8%A8%D8%A7-%D9%86%D8%A7%D9%85-%D8%AF%D8%A7%DB%8C%D9%86%D8%A7%D9%85%DB%8C%DA%A9
موفق باشی دوست من.

sirvan-me
سه شنبه 18 مهر 1391, 13:30 عصر
میشه یذره بیشتر توضیح بدید ؟

veniz2008
سه شنبه 18 مهر 1391, 17:29 عصر
شما برای اولین کاربری که به برنامه وصل میشه یه جدول موقت درون sql میسازی که شامل دو فیلد "آی دی کاربر" و "وضعیت حضور" باشه. هر کاربری که به برنامه وصل میشه فیلد وضعیت حضور رو true کن. هنگام خروج هم مقدارش رو false کن. تا اینجا فرض گرفتیم که مشکلی برای برنامه یا سیستم پیش نیومده باشه و همه چیز نرمال باشه. حالا اگر به هر دلیلی برنامه بصورت غیرمعمول بسته شد(مثل ری ست شدن کامپیوتر یا رفتن برق و ...) اون جدول موقت هم از بین میره.
یه حالت خاص میتونه این وسط اتفاق بیفته که باید مد نظر داشته باشی. فرض کن فقط برنامه به هر دلیلی خروج غیر نرمال داشته باشه (یعنی ویندوز ری ست نشه و sql هم همچنان به درستی کار کنه). در اینحالت برنامه بعد از اجرای دوباره اجازه وصل شدن به کاربرهایی رو که درون جدول موقت هستن نمیده. میتونید در ابتدای اجرای برنامه ابتدا چک کنید که اگر جدول موقت وجود داره(مثل همین حالت آخری که گفتم) ابتدا جدول موقت رو حذف و بعد از نو اونو ایجاد کنید.فقط باید تمامی حالات رو در نظر بگیری و چک کنی.