如何将一个表的数据绑定dropdownlist的id插入另一个表 我有两张桌子,产品和产品类别 1个dropdownlist,通过编程将其数据绑定到ProductCategory 我正在从事VisualStudio2008,ASP.Net表单 用户可以创建新的ProductCategory,即product_category_id自动递增 我需要做一个insert语句 我有以下代码

如何将一个表的数据绑定dropdownlist的id插入另一个表 我有两张桌子,产品和产品类别 1个dropdownlist,通过编程将其数据绑定到ProductCategory 我正在从事VisualStudio2008,ASP.Net表单 用户可以创建新的ProductCategory,即product_category_id自动递增 我需要做一个insert语句 我有以下代码,.net,sql-server,visual-studio-2008,drop-down-menu,.net,Sql Server,Visual Studio 2008,Drop Down Menu,问题是,在显示ProductCategory的product\u category\u名称时,如何确保ProductCategory的“product\u category\u id”在dropdownlist的选择/否后插入product的product\u category\u id?(FKs) Dim sql2 As String=“插入产品(产品类别标识、产品名称、产品标题、产品描述、产品作者、产品作者年龄、产品作者描述、产品其他详细信息、产品维度1、产品维度2、产品价格、产品机构、产品

问题是,在显示ProductCategory的product\u category\u名称时,如何确保ProductCategory的“product\u category\u id”在dropdownlist的选择/否后插入product的product\u category\u id?(FKs)

Dim sql2 As String=“插入产品(产品类别标识、产品名称、产品标题、产品描述、产品作者、产品作者年龄、产品作者描述、产品其他详细信息、产品维度1、产品维度2、产品价格、产品机构、产品状态、产品交付时间)值(@product\u category\u id、@product\u name、@product\u title、@product\u desc、@product\u author\u age、@product\u author\u desc、@product\u other\u detail、@product\u dimension1、@product\u dimension2、@product\u price、@product\u机构、@product\u状态、@product\u交付时间)

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

据我所知,您的SQL/VB没有理由不能按要求工作,您只需稍微更改下拉列表上的数据绑定即可。在页面加载方法中,调用类似于以下内容的内容(我必须假设您的列名):

这意味着

ddlProductCategoryName2.selectedValue

将返回product\u category\u ID,而不是下拉列表中显示的名称。

据我所知,您的SQL/VB没有理由不能按要求工作,您只需稍微更改下拉列表上的数据绑定即可。在page load方法中,调用类似于以下内容的内容(我必须假定您的列名):

这意味着

ddlProductCategoryName2.selectedValue

将返回产品类别ID,而不是下拉列表中显示的名称。

如果出于某种原因您不想将产品类别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)))


没有理由不能完全在SQL中完成此函数背后的逻辑(即,如果表中存在所选字符串的条目,请使用ID,否则插入它并获取ID),但我已经给出了SQL解决方案,所以我想这次我会给出VB解决方案。

我发布了一个替代答案,以防出于某种原因您不想将产品类别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)))

没有理由不能完全在SQL中完成此函数背后的逻辑(即,如果表中存在所选字符串的条目,请使用ID,否则请插入它并获取ID),但我已经给出了SQL解决方案,所以我想这次我会给出VB解决方案