Member 14011135 Ответов: 1

Выпадающие значения не обновляются в базе данных


Я добавил выпадающий список столбцов таблицы. мне нужны значения " да " или " нет " в этих выпадающих списках.Но только первое значение сохраняется в базе данных.

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

 protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
        {
           



            if (e.Row.RowType == DataControlRowType.DataRow)

            {
                count = e.Row.Cells.Count;
                //if ((e.Row.Cells[5].Text).Equals("Yes"))
                //int index = 3;
                // if(Header.InnerText!="cri")
                if (!IsPostBack)
                {
                    for (i = 5; i < e.Row.Cells.Count; i++)
                    {
                        DropDownList ddl = new DropDownList();
                        ddl.ID = "dd '" + i + "'" + e.Row.Cells[0].Text;
                        ddl.SelectedIndex = 0;
                        // ddl.Items.Add("Select");

                        //ddl(new ListItem("Text", "Value");
                        ddl.Items.Add("No");
                        ddl.Items.Add("yes");
                        //ddl.DataTextField = "yes";
                        //  ddl.DataValueField = " 1";
                        // ddl.DataTextField = "No";
                        //ddl.DataValueField = "0";
                        // ddl.Items.Add("No");
                        // ddl.AutoPostBack = true;
                        // ddl.SelectedIndexChanged += new System.EventHandler(DDL_SelectedIndexChanged);
                        ddl.DataBind();
                        e.Row.Cells[i].Controls.Add(ddl);
                        ddl.Enabled = true;



                       
                        SqlConnection cnn = new SqlConnection("connection string");
                        string query = " update devopstable set  " + GridView1.HeaderRow.Cells[i].Text + "  = '" + ddl.SelectedItem.Text + "'  where  devopsid =@devopsid";
                        SqlCommand cmd = new SqlCommand(query, cnn);
                        ddl.DataBind();
                        cnn.Open();
cmd.Parameters.AddWithValue("@devopsid", devopsid);
                        cmd.ExecuteNonQuery();
                        cnn.Close();
                        // FillGrid(); 







                     
                    }

                }

            }
        }

F-ES Sitecore

В вашем sql-операторе нет предложения "WHERE", поэтому вы обновляете каждую строку в таблице devopstable. Кроме того, вы на самом деле ничего не вставляете, так как нет команды "вставить".

Vincent Maverick Durano

Ваш код вообще не имеет никакого смысла. Не могли бы вы пересмотреть свой подход и рассказать нам, что вы действительно хотите сделать?

1 Ответов

Рейтинг:
0

OriginalGriff

Три вещи:
1) Никогда не объединяйте строки для построения 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;
Вполне допустимая команда "удалить таблицу"
--'
А все остальное-это комментарии.
Так оно и происходит: выбирает любые совпадающие строки, удаляет таблицу из базы данных и игнорирует все остальное.

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

2) жестко закодированные строки соединений на веб-сайте? Это совсем не хорошая идея ...

3) Вы заметили, что обновляете БД только тогда, когда не выполняете обратную передачу, не так ли? То есть вы обновляете БД только при первой загрузке страницы, а не после того, как пользователь ее изменил ...