Как вставить идентификатор привязанного к базе данных раскрывающегося списка одной таблицы в другую таблицу - PullRequest
1 голос
/ 28 января 2012
  • У меня есть 2 таблицы, Product & ProductCategory
  • 1, выпадающий список, который программно связан с ProductCategory
  • Работаю в Visual Studio 2008, ASP.Net Forms
  • Пользователи могут создавать новые категории товаров, т.е.product_category_id автоматически увеличивается
  • Мне нужно сделать оператор вставки
  • У меня есть следующий код
  • Вопрос в том, как я могу убедиться, что product_category_idProductCategory вставляется в product_category_id Product после выбора / отсутствия выбора в раскрывающемся списке при отображении product_category_name для ProductCategory?(FKs)

    Dim sql2 As String = "INSERT INTO Product (product_category_id, product_name, product_title, product_desc, product_author, product_author_age, product_author_desc, product_other_detail, product_dimension1, product_dimension_ite_______ product_live_2__in_______), product_is_ продукта_продукт_____ product_продукт__продукт__продукт__продукт_продукт__продукт_продукт_продукт__продукт_продукт_продукт__продукт__продукт__продукт_продукт_продукт_продукт_продукт_продукт__продукт__продукт__продукт__продукт__продукт__продукт__продукт__________________________ товара__продукт__ продукта_продукт__продукт__продукт__продукт___ продукта_продукт__продукт___ продукта_продукт__ продукта_по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_ct_ct_t_t_p_t_p_t_p_t_t_p_t_p_t_t_p_t_t_p_t_t_p_t_t_p_t_p_t_t_t_t_t_t_t_t_t_t_t_t_t_t_t_t_t_t_t_t_t_t__t_t_t_t_t_t_t__t_p_t_t_t_t_p_t__t__t__t__t_t_5_ также, также, как вы можете найти ссылкиCommandText = sql2 cmd.CommandType = CommandType.Text

'следующее утверждение неверно, я считаю?

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)))

Ответы [ 2 ]

1 голос
/ 29 января 2012

Насколько я могу судить, нет причин, по которым ваш SQL / VB не будет работать должным образом, вам просто нужно немного изменить привязку данных в выпадающем списке. В методе загрузки страницы вызовите нечто похожее на следующее (я должен был предположить имена ваших столбцов):

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"

Это будет означать, что

ddlProductCategoryName2.selectedValue

вернет product_category_ID, а не имя, отображаемое в раскрывающемся списке.

0 голосов
/ 29 января 2012

Я публикую альтернативу моему другому ответу на тот случай, если по какой-то причине вы не хотите добавлять данные 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...