.net - usando - cómo insertar el ID de una lista desplegable de una tabla en otra tabla
lista desplegable excel condicionada (2)
Estoy publicando una alternativa a mi otra respuesta en caso de que, por algún motivo, no desee vincular el product_Category_ID a la lista desplegable. Agregue la siguiente función al código detrás de su página.
Private Function GetProductCategoryID(ByVal productCategoryName As String) As Int32
Dim id As Int32
Dim connectionString As String = "" ''your connection string
Using connection As New SqlConnection(connectionString)
connection.Open()
Using Adapter As New SqlDataAdapter("SELECT Product_Category_ID FROM ProductCategory WHERE Product_Category_Name = @Name", connection)
Dim table As New DataTable()
Adapter.SelectCommand.Parameters.AddWithValue("@Name", productCategoryName)
Adapter.Fill(table)
If (table.Rows.Count = 0) Then
Using command As New SqlCommand("INSERT ProductCategory (Proudct_Category_Name) VALUES (@Name) SELECT SCOPE_IDENITTY()", connection)
command.Parameters.AddWithValue("@Name", productCategoryName)
id = Convert.ToInt32(command.ExecuteScalar())
End Using
Else
id = Convert.ToInt32(table.Rows(0).Item(0))
End If
End Using
connection.Close()
End Using
Return id
End Function
Entonces solo tendrías que cambiar una línea en tu código actual:
cmd.Parameters.Add(New SqlParameter("@product_category_id", (ddlProductCategoryName2.selectedValue)))
a
cmd.Parameters.Add(New SqlParameter("@product_category_id", GetProductCategoryID(ddlProductCategoryName2.selectedValue)))
No hay ninguna razón para que la lógica detrás de esta función no se pueda hacer enteramente en SQL (es decir, si existe una entrada en la tabla para la cadena seleccionada use la ID; de lo contrario, insértela y obtenga la ID), pero ya di soluciones SQL aquí , así que pensé que daría soluciones de VB esta vez.
- Tengo 2 tablas, producto y categoría de producto
- 1 lista desplegable que se enlaza mediante programación a ProductCategory
- Estoy trabajando en Visual Studio 2008, ASP.Net Forms
- Los usuarios pueden crear nuevos ProductCategory, es decir. product_category_id se autoevaluó
- Necesito hacer una declaración de inserción
- Tengo el siguiente código
La pregunta es, ¿cómo puedo garantizar que el ''product_category_id'' de ProductCategory se inserta en product_category_id de Product después de una selección / no selección en la lista desplegable, mientras se muestra product_category_name of ProductCategory? (FK)
Dim sql2 As String = "INSERT INTO Product (product_category_id, product_title, product_title, product_desc, product_author, product_author_age, product_author_desc, product_other_detail, product_dimension1, product_dimension2, product_price, product_institution, product_status, product_delivery_time) VALUES (@product_category_id, @product_name, @product_title, @ product_desc, @product_author, @product_author_age, @product_author_desc, @product_other_detail, @ product_dimension1, @ product_dimension2, @product_price, @product_institution, @product_status, @product_delivery_time)
cmd.CommandText = sql2 cmd.CommandType = CommandType.Text
''la siguiente declaración es incorrecta, creo?
cmd.Parameters.Add(New SqlParameter("@product_category_id", (ddlProductCategoryName2.selectedValue)))
cmd.Parameters.Add(New SqlParameter("@product_category_name", (ddlProductCategoryName2.SelectedValue)))
cmd.Parameters.Add(New SqlParameter("@product_name", (txtProductName2.Text)))
cmd.Parameters.Add(New SqlParameter("@product_title", (txtProductTitle2.Text)))
cmd.Parameters.Add(New SqlParameter("@product_desc", (txtProductDescription2.Text)))
cmd.Parameters.Add(New SqlParameter("@product_author", (txtProductAuthor2.Text)))
cmd.Parameters.Add(New SqlParameter("@product_author_age", (ddlProductAuthorAge2.SelectedValue)))
cmd.Parameters.Add(New SqlParameter("@product_author_desc", (txtProductAuthorDesc2.Text)))
Por lo que puedo decir, no hay ninguna razón por la cual su SQL / VB no funcione como se requiere, solo necesita cambiar ligeramente el enlace de datos en la lista desplegable. En el método de carga de página, llame a algo similar a lo siguiente (he tenido que asumir los nombres de sus columnas):
dim adapter as new SqlDataAdapter("SELECT * FROM ProductCategory", [connectionstring])
dim table as new DataTable()
adapter.fill(table)
ddlProductCategoryName2.DataSource = table
ddlProductCategoryName2.DataValueField = "Product_Category_ID"
ddlProductCategoryName2.DataTextField = "Product_Category_Name"
Esto significará que
ddlProductCategoryName2.selectedValue
devolverá el product_category_ID en lugar del nombre que se muestra en la lista desplegable.