mrali.jalali
جمعه 15 مرداد 1395, 10:16 صبح
سلام . من یک آرایه دارم که ردیف به ردیف داخل دیتابیس ثبت میشه . میخام موقه ثبت از ترانزکشن استفاده کنم. میخام اگر یکیش ثبت نشد بقیش هم ثبت نشه.
کد ثبت هم به صورت زیر می باشد :
private void ts_save_Click(object sender, EventArgs e)
{
using (TransactionScope ts = new TransactionScope())
{
try
{
int CountEdit = 0, CountNew = 0;
int r = 0;
foreach (var item in imageListView1.Items)
{
if (ArgDocPicsScan[r].TypeDoc == 0)//درصورتیکه در حالت جدید باشه
{
string LastDoc_id = PatientDocumentManager.InsertDocPatient(ArgDocPics Scan[r].DoctypeId, patid, PuplicFunc.ImageToByte(item.GetImage()), r.ToString(), ".jpg", '1', ArgDocPicsScan[r].DescDoc, DateTime.Now, frmSplash.UserName, 0);
ArgDocPicsScan[r].TypeDoc = 1;
LDEArchiveDataContext db = new LDEArchiveDataContext();
ArgDocPicsScan[r].DocId = LastDoc_id;// db.Tbl_Documents.Select(q => q.Doc_ID).Max().ToString();
item.Text = ArgDocPicsScan[r].DocId.ToString() + ".jpg";
CountNew++;
}
r++;
}
FarsiMessageBox.FarsiMessage.Msg("ثبت انجام شد" + Environment.NewLine + " تعداد اسناد جدید ثبت شده : " + CountNew.ToString() + Environment.NewLine + " تعداد اسناد ویرایش شده : " + CountEdit.ToString());
}
catch (Exception ex)
{
FarsiMessageBox.FarsiMessage.MsgError("ثبت انجام نشد " + Environment.NewLine + ex.Message.ToString()) ;
Transaction.Current.Rollback();
}
}
}
تابع مربوط به ثبت :
public static string InsertDocPatient(int DoctypeID,long PatId,byte[] Data,string DocFilename,string Extension,char Issheet,string DocDesc,
DateTime DoccreateDate, string CrateuserName,byte Zero)
{
LDEArchiveDataContext db = new LDEArchiveDataContext();
Tbl_Document PatDoc = new Tbl_Document();
PatDoc.Doc_TypeID = DoctypeID ;
PatDoc.Doc_PatID = PatId;
PatDoc.Doc_Data = Data;
PatDoc.Doc_FileName = DocFilename;
PatDoc.Doc_Extension = Extension;
PatDoc.Doc_IsSheet = Issheet;
PatDoc.Doc_Decsription = DocDesc;
PatDoc.Doc_CreateDate = DoccreateDate;
PatDoc.Doc_CreateUserName = CrateuserName;
db.Tbl_Documents.InsertOnSubmit(PatDoc);
db.SubmitChanges();
return (PatDoc.Doc_ID.ToString());
}
بدون استفاده از ترانزکشن ثبت انجام میشه و مشکل نداره .
ولی وقتی از ترانزکشن استفاده میکنم حلقه بار اول دستور insert رو رد میکنه و بار دوم وارد cath میشه و خطای زیر رو میده :
MSDTC on server 'PC1' is unavailable.
ممنون میشم راهنمایی کنید ..
کد ثبت هم به صورت زیر می باشد :
private void ts_save_Click(object sender, EventArgs e)
{
using (TransactionScope ts = new TransactionScope())
{
try
{
int CountEdit = 0, CountNew = 0;
int r = 0;
foreach (var item in imageListView1.Items)
{
if (ArgDocPicsScan[r].TypeDoc == 0)//درصورتیکه در حالت جدید باشه
{
string LastDoc_id = PatientDocumentManager.InsertDocPatient(ArgDocPics Scan[r].DoctypeId, patid, PuplicFunc.ImageToByte(item.GetImage()), r.ToString(), ".jpg", '1', ArgDocPicsScan[r].DescDoc, DateTime.Now, frmSplash.UserName, 0);
ArgDocPicsScan[r].TypeDoc = 1;
LDEArchiveDataContext db = new LDEArchiveDataContext();
ArgDocPicsScan[r].DocId = LastDoc_id;// db.Tbl_Documents.Select(q => q.Doc_ID).Max().ToString();
item.Text = ArgDocPicsScan[r].DocId.ToString() + ".jpg";
CountNew++;
}
r++;
}
FarsiMessageBox.FarsiMessage.Msg("ثبت انجام شد" + Environment.NewLine + " تعداد اسناد جدید ثبت شده : " + CountNew.ToString() + Environment.NewLine + " تعداد اسناد ویرایش شده : " + CountEdit.ToString());
}
catch (Exception ex)
{
FarsiMessageBox.FarsiMessage.MsgError("ثبت انجام نشد " + Environment.NewLine + ex.Message.ToString()) ;
Transaction.Current.Rollback();
}
}
}
تابع مربوط به ثبت :
public static string InsertDocPatient(int DoctypeID,long PatId,byte[] Data,string DocFilename,string Extension,char Issheet,string DocDesc,
DateTime DoccreateDate, string CrateuserName,byte Zero)
{
LDEArchiveDataContext db = new LDEArchiveDataContext();
Tbl_Document PatDoc = new Tbl_Document();
PatDoc.Doc_TypeID = DoctypeID ;
PatDoc.Doc_PatID = PatId;
PatDoc.Doc_Data = Data;
PatDoc.Doc_FileName = DocFilename;
PatDoc.Doc_Extension = Extension;
PatDoc.Doc_IsSheet = Issheet;
PatDoc.Doc_Decsription = DocDesc;
PatDoc.Doc_CreateDate = DoccreateDate;
PatDoc.Doc_CreateUserName = CrateuserName;
db.Tbl_Documents.InsertOnSubmit(PatDoc);
db.SubmitChanges();
return (PatDoc.Doc_ID.ToString());
}
بدون استفاده از ترانزکشن ثبت انجام میشه و مشکل نداره .
ولی وقتی از ترانزکشن استفاده میکنم حلقه بار اول دستور insert رو رد میکنه و بار دوم وارد cath میشه و خطای زیر رو میده :
MSDTC on server 'PC1' is unavailable.
ممنون میشم راهنمایی کنید ..