【问题标题】:Saving multiple selected checkboxlist into database asp.net将多个选中的复选框列表保存到数据库 asp.net
【发布时间】:2015-10-25 13:52:12
【问题描述】:

我正在使用 ASP.NET Web 应用程序,但在将多个选中的复选框列表添加到数据库时遇到问题。我希望用户能够选择多个复选框。我已经尝试了一些方法,但它不起作用即使我的数据库连接与其他表正常工作,数据库仍然是空的。

Destinations 表:

CREATE TABLE [dbo].[Destinations]
(
    [Id] INT NOT NULL PRIMARY KEY, 
    [North] INT NULL DEFAULT 0, 
    [West] INT NULL DEFAULT 0, 
    [South] INT NULL DEFAULT 0, 
    [East] INT NULL DEFAULT 0, 
    CONSTRAINT [FK_Destinations_DeliveryMen] FOREIGN KEY ([Id]) REFERENCES [DeliveryMen]([Delivery_ID])
)

而我的CheckBoxList 是:

   <asp:CheckBoxList ID="CheckBoxList2" runat="server" RepeatColumns="2" RepeatDirection="Horizontal" Width="263px">
                <asp:ListItem text="North " Value="1"></asp:ListItem>
                <asp:ListItem text="South " Value="2"></asp:ListItem>
                <asp:ListItem text="West " Value="3"></asp:ListItem>
                <asp:ListItem text="East " Value="4"></asp:ListItem>
            </asp:CheckBoxList>

更新: 我尝试过的 C# 代码:

SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["MyDatabase"].ConnectionString);
conn.Open();
string insertcheckboxlist = "insert into Destinations (North,West,South,East) values(@1,@3,@2,@4))";
SqlCommand comm = new SqlCommand(insertcheckboxlist, conn);
comm.Parameters.AddWithValue("@CheckBoxList2", CheckBoxList2.SelectedItem.Value);

【问题讨论】:

  • 如果您发布用于尝试保存输出的代码,您将获得更多帮助。
  • 好的,但这不会触发您的命令运行..您的代码中确实有它吗?
  • comm.ExecuteNonQuery();
  • 我认为问题在于您的参数化查询需要 4 个参数(@1、@2、@3 和 @4),但您只传递了一个参数,甚至还有一个不同的名称(@CheckBoxList2 )。
  • 我需要将Identity Specification 添加到Id 字段并删除外键。

标签: c# html asp.net database checkboxlist


【解决方案1】:

这张表有问题。起初,我以为你错过了自动编号。由于您只插入了四个复选框的值,而没有在插入语句中提供 id 字段,因此我认为缺少自动编号。

但后来我注意到这个 id 定义了一个外键,表示它引用了 deliverymen.deliveryid。所以它不应该被自动编号,而是由该表提供。这意味着您必须从该表中检索它并将其添加到您的插入中。您不能只插入四个值并期望 id 神奇地转移。

顺便说一句,这张桌子上的设计看起来很糟糕。如果表只有这四个值和一个引用该送货员表的键,那么这四个值很可能只属于送货员表。从这里的情况来看,似乎没有任何理由将它们放在单独的表中。

【讨论】:

  • 感谢您的回答!我在这个主题中进行了很多搜索,我得到的最好是在单独的表格中进行搜索!甚至我希望它从一开始就放在一张桌子上并在Registration页面中使用!但我实际上不知道该怎么做:(我还是初学者!
  • 嗯,无法想象为什么最好放在单独的表中。但是没关系。假设您必须将它们放在单独的表中,您仍然必须在插入中提供该 id。如果您没有在插入语句中提供该 id(假设该表已按照上面的定义),则每次插入此表都会失败。
  • 他们说将它放在单独的表中更容易,因此数据检索会更容易!我是我的情况,我仍然不知道哪种方法更好!
【解决方案2】:

Parameters.AddWithValue 没有做你认为它正在做的事情。我最终只是手动构建了 SQL 字符串。仅供参考,我必须删除外键 (FK_Destinations_DeliveryMen) 才能使其正常工作,因为我没有测试数据并且无法使用它。我还必须将 Identity Specification 添加到 Id 字段的表中。

此代码当前将 -1 添加到数据库中,用于选中的框和未选中的框。

注意:复选框文本的末尾有空格(例如“North”)。不知道这是不是故意的,但它让我有点绊倒。

SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["MyDatabase"].ConnectionString);
conn.Open();

short North = CheckBoxList2.Items.FindByText("North ").Selected;
short West = CheckBoxList2.Items.FindByText("West ").Selected;
short South = CheckBoxList2.Items.FindByText("South ").Selected;
short East = CheckBoxList2.Items.FindByText("East ").Selected;

string insertcheckboxlist = "insert into Destinations (North,West,South,East) values(" + North.ToString + "," + West.ToString + "," + South.ToString + "," + East.ToString + ")";

SqlCommand comm = new SqlCommand(insertcheckboxlist, conn);
comm.ExecuteNonQuery();

希望这能让你继续前进。要将FK_Destinations_DeliveryMen 作为表的一部分使用,您需要获取一个满足该外键的有效值并将其构建到您的insertcheckboxlist SQL 语句中。当然,我们无法为您测试,因为我们没有这些数据,也不了解它是如何工作的,但这可能是一个单独的问题。

这是使这项工作起作用的表定义。正如我之前所说,我将创建NorthSouthEastWest 所有bit 字段。如果你能做到这一点,你可能会让你的生活更轻松:

CREATE TABLE [dbo].[Destinations]
(
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [North] INT NULL DEFAULT 0, 
    [West] INT NULL DEFAULT 0, 
    [South] INT NULL DEFAULT 0, 
    [East] INT NULL DEFAULT 0, 
)

【讨论】:

    猜你喜欢
    • 2021-12-07
    • 2018-05-08
    • 1970-01-01
    • 2011-08-23
    • 1970-01-01
    • 1970-01-01
    • 2019-11-24
    • 2017-09-05
    • 1970-01-01
    相关资源
    最近更新 更多