Более одного пользователя, вставляющего данные в SQL из ASP.net одновременно - PullRequest
0 голосов
/ 24 сентября 2019

Я работаю над проектом, который был создан с использованием asp.net в качестве внешнего интерфейса и SQL Server Express (2008) в качестве внутреннего.Мы завершили проект, но после установки в расположении клиента, когда несколько пользователей входят в систему и используют одну и ту же форму для выполнения транзакции, тогда данные для всех пользователей не совпадают.Пока мы создали отдельный ИД пользователя и Логин для всех пользователей.Кто-нибудь может подсказать мне, что мне делать?

Я определил режим проверки подлинности Windows. В форме входа в систему я проверяю пользователя из базы данных, верны ли пароль и имя пользователя.

  1. SP_1 выполняется для вставки данных в таблицу 1.
  2. Первичный ключ из таблицы извлекается на страницу aspx.cs.
  3. Этот первичный ключ предоставляется SP_2 пос другими параметрами для вставки в таблицу 2.

предположим, что пользователь # 1 ввел данные в раздел заголовка (для таблицы 1) и добавил две или более подробностей в раздел сведений (для таблицы 2).используя его идентификатор.Кроме того, пользователь # 2 ввел данные в раздел заголовка (для таблицы 1) и добавил две или более подробностей в раздел сведений (для таблицы 2). Используя свой идентификатор Оба они одновременно нажимают кнопку сохранения в этом, некоторыеДанные времени одного пользователя не экономят.но если он сохранен, он отображает данные пользователя для одного пользователя и наоборот.

Я пробовал BeginTran и CommitTran в SQL и .net бэкэнд.

Ниже приведен мой код:

    protected void btnprint_Click(object sender, EventArgs e)
    {
        string query;

        query = "delete amcreport where userid='"+Session["userid"].ToString()+"';
        insert(query);

        query = " select compname, accountname, accountname, accountno, bankname, branch, ifsc from tblcomapany where compid='" + ddlcompany.SelectedValue.ToString() + "' ";
        DataTable dtcomp = GetData(query);


//Here the commented code is the one I tried to achieve the things I want.


        //r = new Random();
        //trn1 = r.Next(1, 10);
        //msec = DateTime.Now.Millisecond;
        //System.Threading.Thread.Sleep(msec);



        //query = " DECLARE @MyDateTime DATETIME";
        //query += " SET @MyDateTime = DATEADD(s, "+trn+", GETDATE())";
        // query = "SET TRANSACTION ISOLATION LEVEL SERIALIZABLE";
         //query = " Begin Transaction";
        query = " INSERT INTO amcreport";
        query += " select  '" + Session["userid"].ToString() + "' as userid,'" + dtcomp.Rows[0]["ifsc"].ToString() + "' as ifsc,'" + dtcomp.Rows[0]["branch"].ToString() + "' as branch,'" + dtcomp.Rows[0]["bankname"].ToString() + "' as bankname,'" + dtcomp.Rows[0]["compname"].ToString() + "' as compname,'" + dtcomp.Rows[0]["accountname"].ToString() + "' as accountname,'" + dtcomp.Rows[0]["accountno"].ToString() + "' as accountno,m.busscity,m.bussstate,(isnull(m.title,'')+' '+isnull(m.first,'')+' '+isnull(m.middle,'')+' '+isnull(m.last,''))as name,a.software,m.busscompany,m.bussaddress1,m.bussaddress2,m.bussaddress3,m.mobile,m.mobile2,m.bussphone,m.bussphone2,";
        query += " convert(varchar,a.LetterDate,103) as LetterDate,a.AMCno,convert(varchar,a.AMCStartDate,103) as AMCStartDate,convert(varchar,a.AMCEndDate,103) as AMCEndDate,a.Dongle,a.TotAmount,a.remarks";
        query += "  from AMCDetails a";
        query += " inner join member m on m.memid = a.memid where a.memid = '" + Session["memid"].ToString() + "' and amcid ='" + amcid + "'";
        //query += " WAITFOR TIME @MyDateTime";
        //query += " Commit Transaction ";
        //r = new Random();
        //trn1 = r.Next(1, 10);
        //msec = DateTime.Now.Millisecond;
        //System.Threading.Thread.Sleep(msec);

        insert(query);



        Session["email"] = "";
        if (chksendmail.Checked == true)
        {
            Session["email"] = txtemail.Text;
        }



        Session["amcid"] = "";
        Session["amcid"] = amcid;
        Session["reportname"] = "AMCREPORT.rpt";
        ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "Script1", "ShowPopup('reportviewer.aspx');", true);
    }












 private void insert(String query)
        {

            string constr = ConfigurationManager.ConnectionStrings["CONNECTION"].ConnectionString;
            SqlConnection con = new SqlConnection(constr);
            con.Open();
            //SqlTransaction objtransaction = con.BeginTransaction(System.Data.IsolationLevel.ReadUncommitted);

            //using (SqlConnection con = new SqlConnection(constr))
            //{

            //SqlCommand command = con.CreateCommand();
            // SqlTransaction transaction;

            //transaction = con.BeginTransaction(IsolationLevel.Serializable, Session["userid"].ToString());
            //command.Connection = con;
            //command.Transaction = transaction;
            try
            {

                //string a = " BEGIN TRANSACTION ";

                //query = a + query + " WITH (TABLOCK, HOLDLOCK)";

                SqlCommand cmd = new SqlCommand();
                cmd.CommandText = query;



                cmd.Connection = con;
                //cmd.Transaction = transaction;
                //int id = 0;
                //while (id == 0)
                //{
                    cmd.ExecuteNonQuery();
                //}



                //transaction.Commit();
                con.Close();

                //command.CommandText = query;
                //command.ExecuteNonQuery();
                //transaction.Commit();
            }
            catch (Exception EX)
            {



                con.Close();


            }
            finally
            {
                con.Close();
            }


            //}
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...