Как передать выбранное значение из выпадающего списка в таблицу SQL
Привет,
У меня есть два выпадающих списка: один-привязанный к базе данных(сайт) , а другой-несвязанный(склад),
второй выпадающий список изменит значение на основе 1-го выпадающего списка
Мне нужно вставить выпадающие значения в мою таблицу, когда я выбираю сайт, он вставляется в таблицу, но когда я выбираю склад, он не вставляется в мою таблицу.
Как привязать значение раскрывающегося списка склада?
Что я уже пробовал:
Это мой дизайнерский код:
<asp:TemplateField HeaderText="Site" SortExpression="SITE"> <EditItemTemplate> <asp:textbox ID="TxtsiteEdit" runat="server" Text='<%# Bind("SITE") %>'></asp:textbox> </EditItemTemplate> <InsertItemTemplate> <asp:DropDownList ID="TxtsiteInsert" runat="server" Text='<%# Bind("SITE") %>' TabIndex="6" AutoPostBack="True" DataSourceID="inventsite" DataTextField="SITEID" DataValueField="SITEID" OnSelectedIndexChanged="sitedropdown_SelectedIndexChanged"> </asp:DropDownList> </InsertItemTemplate> <ItemTemplate> <asp:Label ID="TxtSite" runat="server" Text='<%# Bind("SITE") %>'></asp:Label> </ItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Warehouse" SortExpression="WAREHOUSE"> <EditItemTemplate> <asp:TextBox ID="TxtWarehouseEdit" runat="server" Text='<%# Bind("WAREHOUSE") %>'></asp:TextBox> </EditItemTemplate> <InsertItemTemplate> <asp:DropDownList ID= "TxtWarehouseInsert" runat="server" AutoPostBack="True" > </asp:DropDownList> </InsertItemTemplate> <ItemTemplate> <asp:Label ID="TxtWarehouse" runat="server" Text='<%# Bind("WAREHOUSE") %>'></asp:Label> </ItemTemplate> </asp:TemplateField>
Это мой vb код:
Protected Sub sitedropdown_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) Dim IdTxtsiteInsert As DropDownList = CType(DetailsView3.Rows(0).FindControl("TxtsiteInsert"), DropDownList) Response.Cookies("sitedropdownvalue").Value = IdTxtsiteInsert.SelectedValue Fillwarehouse(IdTxtsiteInsert.Text) 'Dim IdTxtWarehouseInsert As DropDownList = CType(DetailsView3.Rows(0).FindControl("TxtWarehouseInsert"), DropDownList) 'insertwarehouse(IdTxtsiteInsert.Text, IdTxtWarehouseInsert.Text) End Sub Public Sub Fillwarehouse(ByVal siteid As String) 'Dim IdTxtWarehouseInsert As DropDownList = CType(DetailsView3.Rows(0).FindControl("TxtWarehouseInsert"), DropDownList) Dim ddr As DropDownList = CType(DetailsView3.Rows(0).FindControl("TxtWarehouseInsert"), DropDownList) Dim strConn As String = WebConfigurationManager.ConnectionStrings("BMGINC_DYNAX09_ProdConnectionString").ConnectionString Dim con As New SqlConnection(strConn) Dim cmd As New SqlCommand() cmd.Connection = con cmd.CommandType = CommandType.Text cmd.CommandText = "Select InventLocationId, Name from InventLocation where InventSiteId ='" & siteid & "'" cmd.Parameters.AddWithValue("InventSiteId", siteid) Dim objDs As New DataSet() Dim dAdapter As New SqlDataAdapter() dAdapter.SelectCommand = cmd con.Open() dAdapter.Fill(objDs) con.Close() If objDs.Tables(0).Rows.Count > 0 Then ddr.DataSource = objDs.Tables(0) ddr.DataTextField = "InventLocationId" ddr.DataValueField = "InventLocationId" ddr.DataBind() ddr.Items.Insert(0, "-Select-") Else LblError.Text = "No Warehouse found" End If End Sub
Richard Deeming
cmd.CommandText = "Select InventLocationId, Name from InventLocation where InventSiteId ='" & siteid & "'"
Ваш код уязвим для SQL-инъекция[^]. НИКОГДА используйте конкатенацию строк для построения SQL-запроса. ВСЕГДА используйте параметризованный запрос.
Все, что вы хотели знать о SQL-инъекции (но боялись спросить) | Трой Хант[^]
Как я могу объяснить SQL-инъекцию без технического жаргона? | Обмен Стеками Информационной Безопасности[^]
Шпаргалка по параметризации запросов | OWASP[^]
Вы уже добавляете параметр; все, что вам нужно сделать, это использовать его:
cmd.CommandText = "Select InventLocationId, Name from InventLocation where InventSiteId = @InventSiteId"
Member 13914727
Общественные суб Fillwarehouse(как byval ID сайта в строку)
'Dim IdTxtWarehouseInsert As DropDownList = CType(DetailsView3.Rows(0).FindControl("TxtWarehouseInsert"), DropDownList)
Dim ddr1 As DropDownList = CType(DetailsView3.Rows(0).FindControl("TxtWarehouseInsert"), DropDownList)
Dim strConn As String = WebConfigurationManager.Выберите("BMGINC_DYNAX09_ProdConnectionString").Параметр connectionString
Dim con как новый SqlConnection(strConn)
Dim cmd как новая команда SqlCommand()
УМК.Подключение = кон
УМК.Свойство Commandtype = Значение Commandtype.Текст
УМК.CommandText = "Select InventLocationId, Name from InventLocation where InventSiteId =@InventSiteId"
-командир.Параметры.AddWithValue("InventSiteId", siteid)
Dim objDs как новый набор данных()
Dim dAdapter как новый SqlDataAdapter()
дадаптер.Команды selectcommand = ЦМД
против.Открыть()
дадаптер.Заполнение(objDs)
против.Закрывать()
Если возражает.Таблицы(0).Строки.Тогда считайте > 0
ddr1.Источник данных = objDs.Таблицы(0)
ddr1.DataTextField = "InventLocationId"
ddr1.DataValueField = "InventLocationId"
ddr1.Привязку()
ddr1.Предметы.Insert(0, "-выбрать склад-")
Еще
LblError.Text = "склад не найден"
Конец, Если
-РДР.Текст = ddr1.SelectedValue
Конец Подводной Лодки
Он показывает ошибку, так как должен объявить скалярную переменную
Member 13914727
Общественные суб Fillwarehouse(как byval ID сайта в строку)
'Dim IdTxtWarehouseInsert As DropDownList = CType(DetailsView3.Rows(0).FindControl("TxtWarehouseInsert"), DropDownList)
Dim ddr1 As DropDownList = CType(DetailsView3.Rows(0).FindControl("TxtWarehouseInsert"), DropDownList)
Dim strConn As String = WebConfigurationManager.Выберите("BMGINC_DYNAX09_ProdConnectionString").Параметр connectionString
Dim con как новый SqlConnection(strConn)
Dim cmd как новая команда SqlCommand()
УМК.Подключение = кон
УМК.Свойство Commandtype = Значение Commandtype.Текст
cmd.CommandText = "Select InventLocationId, Name from InventLocation where InventSiteId =@InventSiteId"
cmd.параметры.AddWithValue("@InventSiteId", InventSiteId)
Dim objDs как новый набор данных()
Dim dAdapter как новый SqlDataAdapter()
дадаптер.Команды selectcommand = ЦМД
кон.Открыть()
дадаптер.Заполнение(objDs)
кон.Рядом()
Если возражает.Таблицы(0).Строки.Тогда считайте > 0
ddr1.Источник данных = objDs.Таблицы(0)
ddr1.DataTextField = "InventLocationId"
ddr1.DataValueField = "InventLocationId"
ddr1.Привязку()
ddr1.Предметы.Insert(0, "-выбрать склад-")
Да сделано вот так