soha_smb
یک شنبه 24 فروردین 1393, 09: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, 09: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, 09: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, 09: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);
               }
           }
       }
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.