我正在使用ASP.NET Web应用程序,我遇到了将多个选定的checkboxlist添加到数据库中的问题。我希望用户能够选择多个复选框。我已经尝试了一些方法但它没有工作数据库仍然是空的,即使我的数据库连接与其他表工作正常。
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);
答案 0 :(得分:0)
Parameters.AddWithValue
没有做你想象的那样。我最终只是手动构建SQL字符串。仅供参考,我不得不删除外键(FK_Destinations_DeliveryMen
)以使其工作,因为我没有测试数据,也无法使用它。我还必须将Identity Specification
添加到Id字段的表中。
此代码当前为数据库添加了-1,表示已检查的框,0表示它们不是。
注意:复选框文本末尾有空格(例如“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语句中。当然,我们无法为您测试,因为我们没有这些数据并且不了解它是如何工作的,但这可能是一个单独的问题。
这是使这项工作的表定义。正如我之前所说,我会North
,South
,East
和West
所有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,
)
答案 1 :(得分:0)
此表存在问题。起初,我以为你错过了自动编号。由于您只插入四个复选框的值而不在insert语句中提供id字段,因此我认为缺少自动编号。
但后来我注意到这个id有一个外键定义说它引用deliverymen.deliveryid。所以它不应该是自动编号,而是由该表提供。这意味着您必须从该表中检索它并将其添加到您的插入。你不能只是插入四个值,并期望id神奇地转移。
顺便说一句,这看起来像这张桌子上的糟糕设计。如果表只有这四个值和一个引用该deliverymen表的键,那么这四个值很可能只属于deliverymen表。根据你的情况,似乎没有任何理由将它们放在一个单独的表格中。