根据表单中的用户输入,将主键从一个表插入另一个表

时间:2014-11-21 06:10:09

标签: c# html asp.net sql-server

我有一个asp:DropDownList的表单,其中填充了Item_Description表中Item列的内容。

我想允许用户从下拉列表中选择一个项目,并在提交表单时,使用C#/ T-SQL将所选项目的ItemID值插入Orders表中。

理论上我可以使用一些冗长的if / else语句来实现这一点,但这似乎太简单了,不需要这么多代码。

我可以通过为参数分配asp:Textbox值并在提交时插入它来更新其他表。当用户从列表中选择相关项时,我似乎无法弄清楚如何将ItemID传递给Orders表。

P.S。我已经建立了与我的数据库的连接,防止SQL注入等。

下拉列表:

ID =" ddlItems"

表格代码:

CREATE TABLE Item
(
    ItemID int primary key,
    Item_Description varchar(255)
); 

CREATE TABLE Orders
(
    OrderID int primary key,
    Order_Item varchar(255)
);

提交按钮点击事件的代码隐藏方法:

protected void Submit_Click(object sender, EventArgs e)
{
    SqlConnection conn;
    SqlCommand comm;
    SqlDataReader reader;
    conn = new SqlConnection("Server=*omitted*");
    comm = new SqlCommand("INSERT INTO Orders VALUES @ItemID;", conn);

    comm.Parameters.Add("@ItemID", System.Data.SqlDbType.Int);
    comm.Parameters["@ItemID"].Value = <<<This is where I need help>>>;

    try
    {
        conn.Open();
        reader = comm.ExecuteReader();
        reader.Close();
    }
    catch
    {
        results.Text = "Error adding data. ";
    }
    finally
    {
        // Close the connection
        conn.Close();
        results.Text = "Added data.";
    }
}

下拉列表绑定:

<asp:DropDOwnList ID="ddlItems" runat="server" AutoPostBack="True" AppendDataBoundItems="True" DataSourceID="SqlDataSource1" DataTextField="Item_Description" DataValueField="Item_Description">
<asp:ListItem Value=""></asp:ListItem>
<asp:DropDownList>

3 个答案:

答案 0 :(得分:0)

根据您的问题,我认为您插入查询是否N#39; t要求条件只删除条件

绑定DropDown代码

       DataSet ds = new DataSet();
        Cmd.CommandText = sqlcmd;
        Cmd.CommandTimeout = this.Timeout;
        Cmd.CommandType = CommandType.StoredProcedure;

        SqlDataAdapter sda = new SqlDataAdapter();
        sda.SelectCommand = Cmd;
        sda.Fill(ds);


        ddl.DataSource = ds.dt[0];
        ddl.DataTextField = ds.dt[0][COlumnname]
        ddl.DataValueField = ds.dt[0][ColumnName];
        ddl.DataBind();

答案 1 :(得分:0)

I would join the Item and Orders table by ItemID, not Item_Description.

CREATE TABLE Item
(
    ItemID int primary key,
    Item_Description varchar(255)
); 

CREATE TABLE Orders
(
    OrderID int primary key,
    ItemID int 
);

I would set a referential constraint on ItemID.  ddlItems should have DataValueField of ItemID and DataTextField of Item_Description.

Assuming ItemID and OrderID are auto-incrementing, you could write:

SqlCommand comm = new SqlCommand("INSERT INTO Orders (ItemID) VALUES (@itemID)");

这也假设只有一个ItemID可以与一个Order关联,否则你需要Item,Order和OrderItemAsc表。

答案 2 :(得分:0)

我假设您将下拉列表与Item表绑定。

所以请遵循这种方法。

  1. 查询将是(对于从项目表中绑定下拉列表数据)

    select * from item

  2. 在C#中

    ddlItems.DataSource = "your data table in which you are taking result of above query"; ddlItems.DataBind();

  3. (我认为你已经完成了上述步骤)

    1. 现在只需在源代码中的下拉列表中添加两个属性即可。

      <asp:DropDownList ID="ddlItems" runat="server" DataTextField="Item_Description"   DataValueField="ItemID " >
      

    2. 现在,您可以直接访问c#code

      下拉列表中所选项目的ID

      comm.Parameters["@ItemID"].Value= ddlItems.SelectedItem.Value;

    3. <强> 修改

      现在查看您编辑的问题,您只需要更改DataValueField="ItemID":)