Virendra S from Bangalore, Karnataka Ответов: 1

2 раза данные вставляются(дублируются) 3-уровневой архитектурой


Кодовый метод слоя данных
public int AddUsers(Users objUser)
       {
           SqlConnection con = new SqlConnection(ConnString);
           con.Open();
           SqlCommand cmd = new SqlCommand("SpCreateUser", con);
           cmd.CommandType = CommandType.StoredProcedure;
           try
           {
               cmd.Parameters.AddWithValue("@Full_name", objUser.fullname);
               cmd.Parameters.AddWithValue("@Dob", objUser.DOB);
               cmd.Parameters.AddWithValue("@email", objUser.Email);
               cmd.Parameters.AddWithValue("@phoneno", objUser.Phoneno);
               cmd.Parameters.AddWithValue("@loginid", objUser.loginId);
               cmd.Parameters.AddWithValue("@pwd", objUser.Password);
               cmd.ExecuteNonQuery();

               int totalrecordscreated = (int)cmd.ExecuteNonQuery();
               return totalrecordscreated;
           }
           catch (Exception ex)
           {
               throw ex;
           }
           finally
           {
               con.Close();
           }
       }


Метод бизнес-уровня :
public int AddUsers(Users objUser)
        {
            DataLayer objUserDAL = new DataLayer();
            try
            {              
                return objUserDAL.AddUsers(objUser);
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                //objUser = null;
            }
        }


Слой пользовательского интерфейса - зарегистрируйтесь.aspx-файл.в CS
protected void btnRegsubmit_Click(object sender, EventArgs e)
{
   Users objUser = new Users();
   objUser.fullname = tbfullname.Text;
   objUser.DOB = tbdob.Text;
   objUser.Email = tbemail.Text;
   objUser.Phoneno = tbphoneno.Text;
   objUser.loginId = tbloginid.Text;
   objUser.Password = tbpwd.Text;

   BAL objBAL = new BAL();

   int records_no = objBAL.AddUsers(objUser);
   Response.Write("No of created records " + records_no.ToString());

}


данные:
Trans_id	Date	Person_id	Payee_details	Amount	Expense_Type
20	2018-08-27	admin	food panda	254	Food
21	2018-08-27	admin	VRl	600	Travel
22	2018-08-14	sam	rewgrg	564	Food
23	2018-08-14	sam	rewgrg	564	Food


наличие интерфейсов для слоев DAL и BLL. после подачи данных записи вставляются два раза(дублирование.) Какая логика здесь ошибочна?

Что я уже пробовал:

Помогите мне, так как я новичок в кодировании, не понимая, какая логика создает эту проблему

Vincent Maverick Durano

Вы нажали кнопку обновить браузер или, возможно, дважды нажали на кнопку? Вы пробовали отлаживать свой код и устанавливать точку останова в событии нажатия кнопки?

Virendra S from Bangalore, Karnataka

Нет, я запускал cmd.ExecuteNonQuery(); дважды в коде, теперь correctd

Gerry Schmitz

Почему вы проигнорировали хранимую процедуру (SpCreateUser)?

"Один" дубликат не является "шаблоном"; вам нужно сделать больше тестов.

1 Ответов

Рейтинг:
7

M4rLask

You are running the query twice, replace this


//first insert
cmd.ExecuteNonQuery();

 //second insert
int totalrecordscreated = (int)cmd.ExecuteNonQuery();
return totalrecordscreated;


Для этого
int numberOfRecords = cmd.ExecuteNonQuery();