PDA

View Full Version : سوال: تداخل ماکسیمم id هنگام ثبت داده ها



parnian man
یک شنبه 24 دی 1391, 15:26 عصر
وقت بخیر
وقتی از جدولی از برنامه ماکسیمم id موجود خونده میشه و با عدد یک جمع میشه تا id درخواست جدید ثبت بشه تا وقتی که فرم کامل بشه و داده ها برای ثیت در دیتا بیس ارسال بشن چون هنوز این شماهر id جدید در دیتابیس ذخیره نشده در همین حین ممکنه که کاربر دیگه ای فرم رو باز کنه و id که به درخواست کاربر دیگه اختصاص داده شده به این درخواست جدید هم داده بشه و در ثبت داده ها در دیتا بیس مشکل ایجاد بشه اگه id کلید باشه با exception مواجه میشه و اگه نباشه مشکلات دیگه
راه حل اینکه این تداخل پیش نیاد چی هست؟

Mahmoud.Afrad
یک شنبه 24 دی 1391, 16:53 عصر
در این لینک (http://barnamenevis.org/showthread.php?378363-%D9%85%D8%B4%DA%A9%D9%84-%D8%AF%D8%B1-%D8%AB%D8%A8%D8%AA-%D8%A7%D8%B7%D9%84%D8%A7%D8%B9%D8%A7%D8%AA-%D8%AF%D8%B1-%D8%AF%DB%8C%D8%AA%D8%A7%D8%A8%DB%8C%D8%B3&p=1675349&viewfull=1#post1675349) پاسخ داده شده.

parnian man
یک شنبه 24 دی 1391, 18:08 عصر
id که تولید میشه تو برنامه مد نظر من با استفاده از سی شارپ هست نه خود دیتابیس و از نوع uniqueidentifier هست .
اگر از Guid.NewGuid()برای تولید ای دی استفاده بشه چطور میشه که با توجه به فیلدهای دیتابیس این کار و انجام میده تا تکراری نباشه؟ یا اینکه در طول اجرای یکبار برنامه ای دی تکراری تولید نمی کنه؟
اگه بخوایم این ای دی ها از عدد خاصی شروع بشه چی؟
کدی که در حال حاضر برنامه برای آی دی استفاده می کنه اینه:

int maxID;
dbConnection = new SqlConnection(connectionstring);
SqlCommand maxIdCommand = new SqlCommand("SELECT MAX(FollowUpNumber) FROM Requests ", dbConnection);
dbConnection.Open();
var maxfollowupnum = maxIdCommand.ExecuteScalar();
dbConnection.Close();

if (maxfollowupnum == DBNull.Value)
{
maxID = 1000;
}
else
{
var split = maxfollowupnum.ToString().Split('-');
maxfollowupnum = split[0];

maxID = Convert.ToInt32(maxfollowupnum);
maxID = maxID + 1;
}

Mahmoud.Afrad
یک شنبه 24 دی 1391, 19:37 عصر
نه تکراری نیست(احتمال تکراری بودن بسیار بسیار کم هست). تولیدش هم توسط سیستم انجام میشه.
برای تولید id جدید نیازی به بدست آوردن آخرین id و split و کارهای دیگه نیست(اگر آخرین id رو بدست بیارید و اونو دستکاری کنید خوب اصلا چه نیازی به استفاده از uniqueidentifier و تولید اون سمت برنامه هست. این کاری که شما کردید باز هم به خاطر همزمانی امکان نمایش id اشتباه هست) . کافیه طبق مثال همون تاپیک از متد newguid استفاده کنید. با این متد id جدید تولید میشه.

parnian man
دوشنبه 25 دی 1391, 12:25 عصر
رشته ای که تولید میشه خیلی طولانی ، تو برنامه من کاربر با این رشته سر و کار داره و این حالت خیلی کاربر پسند نیست راه حل دیگه ای وجود داره؟