PDA

View Full Version : جلوگیری از ثبت تکراری



farghabil
چهارشنبه 11 اردیبهشت 1392, 00:13 صبح
سلام

فرض کنید توشبکه چندنا کاربر دارم با نرم افزاری که نوشتیم کار میکنن و داده هایی رو ثبت میکنن، یه فیلدی داریم که مثلا شماره نامه هستش و از یک شروع میشه میره بالا. حجم اطلاعات هم زیاده
حالا چیکارکنیم که چندتا کاربر همزمان یه شماره تکراری ثبت نکنند

fakhravari
چهارشنبه 11 اردیبهشت 1392, 01:53 صبح
SqlTransaction Trans = Con.BeginTransaction(IsolationLevel.ReadCommitted) ;
اگر شماره کلید
SqlTransaction سرچ کن.
در کل 2 شماره نامه کلید ثبت نمیشود.
وگر نه قبلش یه count بگیر بر اساس شماره نامه

farghabil
چهارشنبه 11 اردیبهشت 1392, 02:45 صبح
sql transaction رو میشه بگی چیه؟ اصلا اینی که نوشتی چیه؟

count هم نمیشه بگیری، حجم داده ها زیاده
فرض کن در سال چندصد هزار تا نامه دارن

fakhravari
چهارشنبه 11 اردیبهشت 1392, 09:02 صبح
using (var Conn = new SqlConnection(_ConnectionString))
{
SqlTransaction trans = null;
try
{
Conn.Open();
trans = Conn.BeginTransaction();

using (SqlCommand Com = new SqlCommand(ComText, Conn, trans))
{
/* DB work */
}
trans.Commit();
}
catch (Exception Ex)
{
if (trans != null) trans.Rollback();
return -1;
}
}


همانند try , catch میشه گفت کار میکنه.

farghabil
چهارشنبه 11 اردیبهشت 1392, 11:08 صبح
ممنون. به نظرم درست میاد ولی معنای کد رو نمیتونم بفهمم
میشه لطف کنید و همراه با توضیح بگید؟ یک مقدار با کمبود وقت روبه رو هستم

fakhravari
چهارشنبه 11 اردیبهشت 1392, 11:33 صبح
برای مثلا چنتا عملیات درج دارید
1 اجرا میشه و 2 اجرا میشه روی 3 خطا میگیری .
همزمان در جدول به صورت موقت save میشن اگر trans.Commit(); داد عملیات موفق میشه.
ولی شما بیاید از روی شماره خطا
catch(SqlException sqlEx)
کد تکراری بودن را بخونید. که نیازی به select زدن اضافی نداشته باشید.
دقیق شمارش یادم نیست
مثلا
sqlEx.Number
با if باید Number چک کنی ببنی چه شماره خطایی داده
اینم برسی کن
SELECT *
FROM master.dbo.sysmessages