Я публикую альтернативу моему другому ответу на тот случай, если по какой-то причине вы не хотите добавлять данные product_Category_ID в раскрывающийся список. Добавьте следующую функцию в код позади вашей страницы.
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
Тогда вам нужно будет изменить только одну строку в вашем текущем коде:
cmd.Parameters.Add(New SqlParameter("@product_category_id", (ddlProductCategoryName2.selectedValue)))
до
cmd.Parameters.Add(New SqlParameter("@product_category_id", GetProductCategoryID(ddlProductCategoryName2.selectedValue)))
Нет причины, по которой логика этой функции не может быть полностью реализована в SQL (т. Е. Если в таблице существует запись для выбранной строки, используйте идентификатор, в противном случае вставьте ее и получите идентификатор), но я уже учитывая решения SQL здесь , поэтому подумал, что на этот раз я дам решения VB.