ایمان اختیاری
پنج شنبه 04 شهریور 1389, 15:35 عصر
سلام..
یه تیکه کد دارم به این صورت
ClientInf ci = new ClientInf()
{
EnterTime = DateTime.Now.ToString("hh:mm:ss"),
intFlag = 5,
PcId = 12,
stcode = textBox1.Text,
TimeRemaing = 20
};
dbase.ClientInfs.InsertOnSubmit(ci);
dbase.SubmitChanges();
خب...فقط ممکنه اطلاعات که قراره وارد بشه قبلا توی جدول وجود داشته باشه
روی همین خاطر از بلاک کنترلی Try -- catch استفاده می کنم .. این تیکه کد توی try و بعدش توی بلاک catch هم کد زیر رو نوشتم
var query = from t in dbase.ClientInfs
where t.stcode == textBox1.Text
select t;
textBox2.Text = query.Single().TimeRemaing.ToString();
خب .. حالا مشکل از اینجا شروع می شه که وقتی اطلاعات تکراری می خواد وارد بشه چون فیلد stcode به صورت کلید تعریف شده پس خطا داریم و دستور submitchange انجام نمی شه و به بلاک catch می ریم
اونجا چون هنوز دستور insert لغو نشده مقدار فیلد timeremaning هنوز همون مقداریه که می خواستیم ثبت کنیم نه چیزی که الان توی دیتابیس هست ..
برای این موضوع Discard Change سرچ زدم چند تا مطلب پیدا کردم
dbase.Refresh(System.Data.Linq.RefreshMode.Overwri teCurrentValues, dbase.ClientInfs);
برای مورد فوق گفت دیتا در حالت فقط خواندنی هست امکانش نیست
dbase.GetChangeSet().Inserts.Clear();
برای مورد فوق گفت دیتا هنوز در حالت insert هست پس نمی شه پاکش کرد
var change = dbase.GetChangeSet();
foreach (var updating in change.Updates)
{
dbase.GetTable(updating.GetType()).DeleteOnSubmit( updating);
}
و مورد فوق هم بدون error انجام شد ولی نتایج صحیح نبود
جایی خوندم باید از تراکنش استفاده کنم ..و وفکر کنم آخرش همین کار رو باید انجام بدم ولی این موراد چرا انجام نشد و در کل اگه بخوایم discard کنیم چه راه حلی دارید ؟
متشکرم
یه تیکه کد دارم به این صورت
ClientInf ci = new ClientInf()
{
EnterTime = DateTime.Now.ToString("hh:mm:ss"),
intFlag = 5,
PcId = 12,
stcode = textBox1.Text,
TimeRemaing = 20
};
dbase.ClientInfs.InsertOnSubmit(ci);
dbase.SubmitChanges();
خب...فقط ممکنه اطلاعات که قراره وارد بشه قبلا توی جدول وجود داشته باشه
روی همین خاطر از بلاک کنترلی Try -- catch استفاده می کنم .. این تیکه کد توی try و بعدش توی بلاک catch هم کد زیر رو نوشتم
var query = from t in dbase.ClientInfs
where t.stcode == textBox1.Text
select t;
textBox2.Text = query.Single().TimeRemaing.ToString();
خب .. حالا مشکل از اینجا شروع می شه که وقتی اطلاعات تکراری می خواد وارد بشه چون فیلد stcode به صورت کلید تعریف شده پس خطا داریم و دستور submitchange انجام نمی شه و به بلاک catch می ریم
اونجا چون هنوز دستور insert لغو نشده مقدار فیلد timeremaning هنوز همون مقداریه که می خواستیم ثبت کنیم نه چیزی که الان توی دیتابیس هست ..
برای این موضوع Discard Change سرچ زدم چند تا مطلب پیدا کردم
dbase.Refresh(System.Data.Linq.RefreshMode.Overwri teCurrentValues, dbase.ClientInfs);
برای مورد فوق گفت دیتا در حالت فقط خواندنی هست امکانش نیست
dbase.GetChangeSet().Inserts.Clear();
برای مورد فوق گفت دیتا هنوز در حالت insert هست پس نمی شه پاکش کرد
var change = dbase.GetChangeSet();
foreach (var updating in change.Updates)
{
dbase.GetTable(updating.GetType()).DeleteOnSubmit( updating);
}
و مورد فوق هم بدون error انجام شد ولی نتایج صحیح نبود
جایی خوندم باید از تراکنش استفاده کنم ..و وفکر کنم آخرش همین کار رو باید انجام بدم ولی این موراد چرا انجام نشد و در کل اگه بخوایم discard کنیم چه راه حلی دارید ؟
متشکرم