PDA

View Full Version : حرفه ای: پیاده سازی transaction در برنامه 3لایه



soha_smb
یک شنبه 24 فروردین 1393, 08:03 صبح
سلام
من کدهای transaction رو توی برنامه 3 لایه چطوری بنویسم
این کدم در dalbase هست

public int ExecuteNoneQuery(CommandType commandType, string commandText, params SqlParameter[] commandParameters)
{

using (SqlConnection con = new SqlConnection(ConnectionString))
{
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
cmd.CommandType = commandType;
cmd.CommandText = commandText;
cmd.Parameters.AddRange(commandParameters);
con.Open();
int retVal = cmd.ExecuteNonQuery();
con.Close();
return retVal;
}

}

alireza_s_84
یک شنبه 24 فروردین 1393, 08:19 صبح
سلام
من کدهای transaction رو توی برنامه 3 لایه چطوری بنویسم
این کدم در dalbase هست

public int ExecuteNoneQuery(CommandType commandType, string commandText, params SqlParameter[] commandParameters)
{

using (SqlConnection con = new SqlConnection(ConnectionString))
{
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
cmd.CommandType = commandType;
cmd.CommandText = commandText;
cmd.Parameters.AddRange(commandParameters);
con.Open();
int retVal = cmd.ExecuteNonQuery();
con.Close();
return retVal;
}

}

متد زیر رو به کلاس DAL خودتون اضافه کنید و بعد برای انجام Transaction یک لیست از کوئری های خودتون رو به اون پاس بدین:

public static bool ExecuteBatch(List<SqlCommand> commands)
{
bool result = false;
SqlTransaction Trans;


using (SqlConnection Cnn = InitConnection())
{
Cnn.Open();
Trans = Cnn.BeginTransaction();


try
{
foreach (var command in commands)
{
command.Connection = Cnn;
command.Transaction = Trans;
command.ExecuteNonQuery();
}
Trans.Commit();
result = true;
}
catch (Exception ex)
{
Trans.Rollback();
Log.WriteError(MethodInfo.GetCurrentMethod(), ex.Message);
}
finally
{
if (Cnn.State == ConnectionState.Open)
{
Cnn.Close();
Cnn.Dispose();
commands.Clear();
}
}
}


return result;
}

soha_smb
یک شنبه 24 فروردین 1393, 08:42 صبح
با تشکر
میشه یه مثالا بزنین من منظورتونو متوجه نشدم
ببینید این کد لایه dal من هست

public int AddRecord(int Action, int PersonID,bool Type,int SubjectID,
int AddedBy, int ID)
{
return ExecuteNoneQuery(System.Data.CommandType.StoredPro cedure, "sp_Inseart_Edit_Record", new SqlParameter[]
{
new SqlParameter ("@Action", Action),
new SqlParameter ("@PersonID",PersonID),
new SqlParameter ("@Type",Type),
new SqlParameter ("@SubjectID",SubjectID),
new SqlParameter ("@AddedBy",AddedBy),
new SqlParameter ("@ID", ID),
});
}
اینم کد لایه BLl من هستش

public static int AddRecord(int Action, int PersonID, bool Type, int SubjectID, int AddedBy,int ID),

{
DALs.Record AddRecord_ = new DALs.Record();
int retval = 0;
{
AddRecord_.AddRecord(Action,PersonID,Type,SubjectI D,
AddedBy, ID);
}
return retval;
}

اینم کد برنامه هستش

protected void BtnSave_Click(object sender, EventArgs e)
{
int userid = Convert.ToInt32(Public.GetUserID(Page.User.Identit y.Name));
int NumberA; if (txt_NumberA.Text == "") NumberA = 0; else NumberA = int.Parse(txt_NumberA.Text);
int retval = BLL.Record.AddRecord
(
1,
int.Parse(personid),
Boolean.Parse(drd_Type.SelectedValue),
int.Parse(drd_subjectrecord.SelectedValue),
userid,
0
);
if (retval == 0)
{
clear();
Grid_Manage.DataBind();
lbl_msg.Visible = true;
lbl_msg.Text = "آیتم مورد نظر با موفقیت ثبت گردید.";
}
else
{
lbl_msg.Visible = true;
lbl_msg.Text = "خطایی در عملیات ثبت رخ داده است ،لطفا با مدیریت تماس بگیرید.";
}
}


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

Mojtaba.Shateri
یک شنبه 24 فروردین 1393, 08:43 صبح
سلام
من کدهای transaction رو توی برنامه 3 لایه چطوری بنویسم
این کدم در dalbase هست

public int ExecuteNoneQuery(CommandType commandType, string commandText, params SqlParameter[] commandParameters)
{

using (SqlConnection con = new SqlConnection(ConnectionString))
{
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
cmd.CommandType = commandType;
cmd.CommandText = commandText;
cmd.Parameters.AddRange(commandParameters);
con.Open();
int retVal = cmd.ExecuteNonQuery();
con.Close();
return retVal;
}

}

using (SqlConnection connection1 = new SqlConnection(connectionString))
{
connection1.Open();
SqlTransaction sqlTran = connection1.BeginTransaction();
SqlCommand command = connection1.CreateCommand();
command.Transaction = sqlTran;
try
{
command.CommandText =
"insert into ...";
command.ExecuteNonQuery();
command.CommandText =
"insert into ...";
command.ExecuteNonQuery();

sqlTran.Commit();
MessageBox.Show("با موفقيت ثبت شد");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
try
{
sqlTran.Rollback();
}
catch (Exception exRollback)
{
MessageBox.Show(exRollback.Message);
}
}
}