【问题标题】:Insert primary key from one table into another based on user input from a form根据表单中的用户输入将主键从一个表插入另一个表
【发布时间】:2014-11-21 06:10:09
【问题描述】:

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

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

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

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

附:我已经建立了与我的数据库的连接,防止 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>

【问题讨论】:

  • 我们不能在 SQL Server 中将 Where 子句与 Insert 语句一起使用
  • 显示绑定下拉列表的代码,以及从下拉列表中获取数据的表格架构!
  • @Dhaval 如果您可以显示您的下拉绑定代码,这很容易!
  • 我可以设置 DataValueField="ItemID" 来完成这项工作吗?
  • 基本上你想要绑定下拉或插入数据??我仍然不明白你的问题,所以请探索更多,以便我可以提供代码......

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


【解决方案1】:

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

所以遵循这个方法。

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

    select * from item

  2. 在 C# 中

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

(我认为您已经完成了上述步骤)

  1. 现在只需像这样将两个属性添加到源中的下拉列表中。

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

  2. 现在您可以直接从 c# 代码的下拉列表中访问所选项目的 id

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

编辑

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

【讨论】:

  • 感谢您的全面协助。我的大版本仍然存在问题,但这适用于我的简单示例,最重要的是,它直接解决了我的主要问题,而不是关注与上下文无关的事情。
  • 欢迎 :) 如果您有任何其他问题需要我们提供帮助,您可以在此处或有问题的地方发表评论。
  • 我想我明白了。应用您的答案后,我只需要设置 comm.Parameters["@ItemID"].Value = ddlItems.SelectedValue 。这似乎正在返回我最初想要的值。
  • 其实ddlItems.SelectedItem.ValueDropDownList1.SelectedValue都是一样的:)
【解决方案2】:
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 表。

【讨论】:

  • 看起来我在询问更改 DataValueField 时可能走在了正确的轨道上。
【解决方案3】:

根据您的问题,我认为您插入查询不需要 Where 条件只需删除条件

绑定下拉代码

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

【讨论】:

  • 在执行 Submit_Click() 时不会导致所有 ItemID 值都插入到 Orders 中吗?
  • 不,它只会插入单个记录
  • @Dhaval 你的建议是正确的,但它不是答案。你可以对这个问题发表评论
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-25
  • 2021-04-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多