Не удается получить данные представления сетки и сохранить их в базе данных
<pre><div class="container"> <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" Font-Size="Medium"> <asp:TemplateField HeaderText="Student ID"> <ItemTemplate> <asp:Label ID="lblID" runat="server" Width="80px" Text='<%#Eval("studentID") %>'/> </ItemTemplate> <asp:TemplateField HeaderText=""> <ItemTemplate> <asp:LinkButton runat="server" OnCommand="LinkButton_Click" Text=" VoteCandidate"> </asp:LinkButton> </ItemTemplate> </asp:GridView> <div> <asp:Label ID="Label1" runat="server" ></asp:Label> </div> </div>
Here is my form to show the gridview.
Что я уже пробовал:
protected void loadCandidate() { con.Open(); MySqlCommand cmd = new MySqlCommand("select studentID from candidate where faculty='FOCS'", con); MySqlDataReader dr = cmd.ExecuteReader(); if (dr.HasRows == true) { GridView1.DataSource = dr; GridView1.DataBind(); } } protected void LinkButton_Click(Object sender, EventArgs e) { String MyConnection2 = "Server=localhost;database=ovs;Uid=root;password=; Convert Zero Datetime=True"; foreach (GridViewRow g1 in GridView1.Rows) { MySqlConnection MyConn2 = new MySqlConnection(MyConnection2); String query = "insert into voting (studentID)values ('" + g1.Cells[0].Text + "')" ; MySqlCommand MyCommand2 = new MySqlCommand(query, MyConn2); MySqlDataReader MyReader2; MyConn2.Open(); MyReader2 = MyCommand2.ExecuteReader(); MyConn2.Close(); } }
When I execute the sql insert command, no error occur, but I expect the studentID that displayed in the gridview being stored in the voting table, but the studentID on the voting table are empty
Richard Deeming
Ваш код уязвим для SQL-инъекция[^]. НИКОГДА используйте конкатенацию строк для построения SQL-запроса. ВСЕГДА используйте параметризованный запрос.
Все, что вы хотели знать о SQL-инъекции (но боялись спросить) | Трой Хант[^]
Как я могу объяснить SQL-инъекцию без технического жаргона? | Обмен Стеками Информационной Безопасности[^]
Шпаргалка по параметризации запросов | OWASP[^]