nar86 Ответов: 1

Предупреждающее сообщение пользователю ok или отмена с помощью C#


string url = string.Empty;
                bool isAgri = true;
                int count = 0; //added
                foreach (GridViewRow row in grdRpt.Rows)
                {
                    CheckBox chk = (CheckBox)grdRpt.Rows[row.RowIndex].FindControl("chkselecdata");
                    if (chk.Checked == true)
                    {
                        count++;
                        int key = Convert.ToInt32(grdRpt.DataKeys[row.RowIndex].Value);
                        if (row.Cells[4].Text == "Agri Input")
                        {
                            isAgri = true;
                            url = ConfigurationManager.AppSettings["SAPAgriInputPostingUrl"].ToString();
                        }
                        break;
                    }
                }

String strConnString = ConfigurationManager.ConnectionStrings["IvcSpiderDBConnectionStrings"].ConnectionString;
                SqlConnection con = new SqlConnection(strConnString);
                con.Open();
                if (count > 0)
                {
                    if (isAgri)
                    {
                        string slip_No = string.Empty;
                        List<string> slipnoList = new List<string>();
                        List<Dist_Request> dist_requests = new List<Dist_Request>();
                        foreach (GridViewRow row in grdRpt.Rows)
                        {
                            CheckBox cb = (CheckBox)row.FindControl("chkselecdata");
                            if (cb.Checked == true)
                            {
                                int key = Convert.ToInt32(grdRpt.DataKeys[row.RowIndex].Value);

                                slip_No = row.Cells[2].Text;
                                Dist_Request dist_request = new Dist_Request();
                                LT_ITEMS lT_ITEM = new LT_ITEMS();
   lT_ITEM.MATNR = row.Cells[15].Text == " " ? string.Empty : row.Cells[15].Text;
   
  dist_request = dist_requests.Where(r => r.SLIP_NO == slip_No).FirstOrDefault();
             if (dist_request != null && dist_request.SLIP_NO != null)
               {
dist_requests.Find(f => f.SLIP_NO == slip_No).PostingNav.Add(lT_ITEM);
dist_requests.Find(f => f.SLIP_NO == slip_No).FLAG += "," + key.ToString();
               }
      else
             {
                  dist_request = new Dist_Request();
                  dist_request.SLIP_NO = slip_No;
                  dist_request.BUDAT = DateTime.Now.ToString("yyyyMMdd");
                  dist_request.MBLNR = string.Empty; 
                            dist_request.FLAG = key.ToString();
                           List<LT_ITEMS> lT_ITEMs = new List<LT_ITEMS>();
                           List<ReturnNav> listreturnNav = new List<ReturnNav>();
                           lT_ITEMs.Add(lT_ITEM);
                          dist_request.PostingNav = lT_ITEMs;
                          dist_request.ReturnNav = listreturnNav;
                          dist_requests.Add(dist_request);
            }

 }
                            else
                            {
                                slip_No = row.Cells[2].Text;
                                slipnoList.Add(slip_No);
                            }
                        }
                        HttpHelper httpHelper = new HttpHelper();
                        if (dist_requests.Count > 1)
                        {
                            ScriptManager.RegisterStartupScript(this, GetType(), "showalert", "alert('More than one slip no selected , Cannot post with multiple slip no');", true);
                            return;
                        }

        string reqkeys = dist_requests.FirstOrDefault().FLAG;
                        dist_requests.FirstOrDefault().FLAG = "1";
                        Dist_Response dist_Response = new Dist_Response();

               dist_Response = httpHelper.PostAsync<Dist_Response, 
         Dist_Request>(dist_requests.FirstOrDefault(), url).GetAwaiter().GetResult();
                List<int> updateKeys = reqkeys.Split(',').Select(int.Parse).ToList();
                        string resulttype = "E";
                        string resultmsg = "";
                        string alertmsg = "Unable to Post in SAP ";
if (dist_Response != null && dist_Response.d != null && dist_Response.d.ReturnNav != null && dist_Response.d.ReturnNav.results != null)
                        {
             foreach (ReturnNavresults r in dist_Response.d.ReturnNav.results)
                            {
                                resulttype += "|" + r.Type;
                                resultmsg += "|" + r.Type + ":" + r.Message;
                            }
                            if (!string.IsNullOrEmpty(resultmsg))
                            {
                                resulttype.Remove(0, 1);
                                resultmsg.Remove(0, 1);
                                alertmsg = resultmsg;
                            }
                            resulttype = dist_Response.d.ReturnNav.results.FirstOrDefault().Type;
                            resultmsg = dist_Response.d.ReturnNav.results.FirstOrDefault().Message;
                            alertmsg = resultmsg;
                        }
                        foreach (int key in updateKeys)
                        {
                            SqlCommand cmd = new SqlCommand("UPDATE [transact].[transaction_item] SET Status = '" + resulttype + "',status_description = '" + resultmsg + "',posteddate = convert(varchar, getdate(), 103),username = '" + Request.Cookies["SpiderUserLoginName"].Value.ToString() + "' Where transaction_id=" + key.ToString(), con);
                            cmd.ExecuteNonQuery();
                            ScriptManager.RegisterStartupScript(this, GetType(), "showalert", "alert('" + alertmsg + "');", true);
                        }
                    }


В режиме запуска gridview выглядит следующим образом


зоны расположения сезоне slipno slipdate
2315 28.05.2018 2019 1001 Диавала
2315 28.05.2018 2019 1002 Ферке
2315 28.05.2018 2019 1003 Ферескдо

я хочу сделать одну проверку в gridview, если предположим, что один слип не появился более одного раза, значит, я хочу показать сообщение пользователю "еще немного слипно есть ли у вас продолжение?"
ОК отменяю

для этого как сделать в asp.net использование c#

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

string url = string.Empty;
                bool isAgri = true;
                int count = 0; //added
                foreach (GridViewRow row in grdRpt.Rows)
                {
                    CheckBox chk = (CheckBox)grdRpt.Rows[row.RowIndex].FindControl("chkselecdata");
                    if (chk.Checked == true)
                    {
                        count++;
                        int key = Convert.ToInt32(grdRpt.DataKeys[row.RowIndex].Value);
                        if (row.Cells[4].Text == "Agri Input")
                        {
                            isAgri = true;
                            url = ConfigurationManager.AppSettings["SAPAgriInputPostingUrl"].ToString();
                        }
                        break;
                    }
                }

<pre> String strConnString = ConfigurationManager.ConnectionStrings["IvcSpiderDBConnectionStrings"].ConnectionString;
                SqlConnection con = new SqlConnection(strConnString);
                con.Open();
                if (count > 0)
                {
                    if (isAgri)
                    {
                        string slip_No = string.Empty;
                        List<string> slipnoList = new List<string>();
                        List<Dist_Request> dist_requests = new List<Dist_Request>();
                        foreach (GridViewRow row in grdRpt.Rows)
                        {
                            CheckBox cb = (CheckBox)row.FindControl("chkselecdata");
                            if (cb.Checked == true)
                            {
                                int key = Convert.ToInt32(grdRpt.DataKeys[row.RowIndex].Value);

                                slip_No = row.Cells[2].Text;
                                Dist_Request dist_request = new Dist_Request();
                                LT_ITEMS lT_ITEM = new LT_ITEMS();
   lT_ITEM.MATNR = row.Cells[15].Text == " " ? string.Empty : row.Cells[15].Text;
   
  dist_request = dist_requests.Where(r => r.SLIP_NO == slip_No).FirstOrDefault();
             if (dist_request != null && dist_request.SLIP_NO != null)
               {
dist_requests.Find(f => f.SLIP_NO == slip_No).PostingNav.Add(lT_ITEM);
dist_requests.Find(f => f.SLIP_NO == slip_No).FLAG += "," + key.ToString();
               }
      else
             {
                  dist_request = new Dist_Request();
                  dist_request.SLIP_NO = slip_No;
                  dist_request.BUDAT = DateTime.Now.ToString("yyyyMMdd");
                  dist_request.MBLNR = string.Empty; 
                            dist_request.FLAG = key.ToString();
                           List<LT_ITEMS> lT_ITEMs = new List<LT_ITEMS>();
                           List<ReturnNav> listreturnNav = new List<ReturnNav>();
                           lT_ITEMs.Add(lT_ITEM);
                          dist_request.PostingNav = lT_ITEMs;
                          dist_request.ReturnNav = listreturnNav;
                          dist_requests.Add(dist_request);
            }

 }
                            else
                            {
                                slip_No = row.Cells[2].Text;
                                slipnoList.Add(slip_No);
                            }
                        }
                        HttpHelper httpHelper = new HttpHelper();
                        if (dist_requests.Count > 1)
                        {
                            ScriptManager.RegisterStartupScript(this, GetType(), "showalert", "alert('More than one slip no selected , Cannot post with multiple slip no');", true);
                            return;
                        }

        string reqkeys = dist_requests.FirstOrDefault().FLAG;
                        dist_requests.FirstOrDefault().FLAG = "1";
                        Dist_Response dist_Response = new Dist_Response();

               dist_Response = httpHelper.PostAsync<Dist_Response, 
         Dist_Request>(dist_requests.FirstOrDefault(), url).GetAwaiter().GetResult();
                List<int> updateKeys = reqkeys.Split(',').Select(int.Parse).ToList();
                        string resulttype = "E";
                        string resultmsg = "";
                        string alertmsg = "Unable to Post in SAP ";
if (dist_Response != null && dist_Response.d != null && dist_Response.d.ReturnNav != null && dist_Response.d.ReturnNav.results != null)
                        {
             foreach (ReturnNavresults r in dist_Response.d.ReturnNav.results)
                            {
                                resulttype += "|" + r.Type;
                                resultmsg += "|" + r.Type + ":" + r.Message;
                            }
                            if (!string.IsNullOrEmpty(resultmsg))
                            {
                                resulttype.Remove(0, 1);
                                resultmsg.Remove(0, 1);
                                alertmsg = resultmsg;
                            }
                            resulttype = dist_Response.d.ReturnNav.results.FirstOrDefault().Type;
                            resultmsg = dist_Response.d.ReturnNav.results.FirstOrDefault().Message;
                            alertmsg = resultmsg;
                        }
                        foreach (int key in updateKeys)
                        {
                            SqlCommand cmd = new SqlCommand("UPDATE [transact].[transaction_item] SET Status = '" + resulttype + "',status_description = '" + resultmsg + "',posteddate = convert(varchar, getdate(), 103),username = '" + Request.Cookies["SpiderUserLoginName"].Value.ToString() + "' Where transaction_id=" + key.ToString(), con);
                            cmd.ExecuteNonQuery();
                            ScriptManager.RegisterStartupScript(this, GetType(), "showalert", "alert('" + alertmsg + "');", true);
                        }
                    }



В режиме запуска gridview выглядит следующим образом


зоны расположения сезоне slipno slipdate
2315 28.05.2018 2019 1001 Диавала
2315 28.05.2018 2019 1002 Ферке
2315 28.05.2018 2019 1003 Ферескдо

я хочу сделать одну проверку в gridview, если предположим, что один слип не появился более одного раза, значит, я хочу показать сообщение пользователю "еще немного слипно есть ли у вас продолжение?"
ОК отменяю

для этого как сделать в asp.net использование c#

Richard MacCutchan

"за то, как это сделать в asp.net использование c#"
Вы не. Код C# выполняется на сервере, а не в браузере, где пользователь взаимодействует с веб-сайтом. Вам нужно передать некоторую информацию обратно в ваш Javascript и разместить там предупреждающее сообщение.

Но сначала вам нужно исправить свой SQL, как это было предложено OriginalGriff - и не в первый раз. Позаботьтесь об этом в срочном порядке, чтобы защитить целостность вашей базы данных.

1 Ответов

Рейтинг:
2

OriginalGriff

Не делай этого так! Никогда не объединяйте строки для построения команды SQL. Это оставляет вас широко открытыми для случайной или преднамеренной атаки SQL-инъекции, которая может уничтожить всю вашу базу данных. Вместо этого всегда используйте параметризованные запросы.

Когда вы объединяете строки, вы вызываете проблемы, потому что SQL получает такие команды, как:

SELECT * FROM MyTable WHERE StreetAddress = 'Baker's Wood'
Цитата, добавленная пользователем, завершает строку в том, что касается SQL, и вы получаете проблемы. Но могло быть и хуже. Если я приду и наберу вместо этого: "x';DROP TABLE MyTable;--", то SQL получит совсем другую команду:
SELECT * FROM MyTable WHERE StreetAddress = 'x';DROP TABLE MyTable;--'
Которые SQL видит как три отдельные команды:
SELECT * FROM MyTable WHERE StreetAddress = 'x';
Совершенно правильный выбор
DROP TABLE MyTable;
Вполне допустимая команда "удалить таблицу"
--'
А все остальное-это комментарии.
Так оно и происходит: выбирает любые совпадающие строки, удаляет таблицу из базы данных и игнорирует все остальное.

Поэтому всегда используйте параметризованные запросы! Или будьте готовы часто восстанавливать свою БД из резервной копии. Вы ведь регулярно делаете резервные копии, не так ли?

Сначала исправьте это в своем приложении в приоритетном порядке, а затем рассмотрите проблему, с которой вы столкнулись. Но пропустите одну ... и ваша БД будет повреждена.