[英]fill foreign key from primary key using asp and C#
我正在使用c#在asp.net中编写课程和打包表格,这是我的新手。执行任务时,我面临的问题是将所选项目的外键插入数据库,因此我制作了三个包含Id
(pk)的表courses
和Course-name
, Pkg-code
包含Id
(pk), Pkg-name
,最后一个表是Pkg
,其中包含Pkg-id
(fk),引用Pkg-Code(Id)
和Course-Id
(fk)引用Courses(Id)
。
现在我需要做的是,当我从下拉菜单中选择程序包,并从Web应用程序的复选框中选择“课程”时,所选项目的ID将通过外键插入到第三张表Pkg
,现在我面临的问题是执行它时错误正在生成,无法在Course-Id
插入NULL值,我的存储过程在执行它时将其插入了第三个表pkg中的值,并且工作正常,我想在数据库中建立一对多关系,我已经搜索了很多但找不到所需的答案请帮忙
<div>
Select Pkg: <asp:DropDownList ID ="drop1" runat="server">
</asp:DropDownList>
</div>
<div style="text-align:center">
<asp:CheckBoxList ID ="check1" runat="server">
</asp:CheckBoxList>
</div>
<div>
<asp:Button ID="Button1" runat="server" Text="Save" OnClick="Button1_Click" />
</div>
码:
protected void Page_Load(object sender, EventArgs e)
{
string constr = ConfigurationManager.ConnectionStrings["Db"].ConnectionString;
SqlConnection conn = new SqlConnection(constr);
conn.Open();
SqlCommand cmd = new SqlCommand("Select * from PKgCode ", conn);
SqlDataAdapter data = new SqlDataAdapter(cmd);
DataSet da = new DataSet();
data.Fill(da);
drop1.DataSource = da;
//drop1.DataValueField = "PkgName";
drop1.DataTextField = "PkgName";
drop1.DataValueField="Id";
drop1.DataBind();
conn.Close();
conn.Open();
SqlCommand cmdd = new SqlCommand("Select * from Courses ", conn);
SqlDataAdapter daa = new SqlDataAdapter(cmdd);
DataSet ss = new DataSet();
daa.Fill(ss);
check1.DataSource = ss;
check1.DataTextField = "CourseName";
check1.DataValueField = "Id";
check1.DataBind();
conn.Close();
}
protected void Button1_Click(object sender, EventArgs e)
{
string constr = ConfigurationManager.ConnectionStrings["Db"].ConnectionString;
SqlConnection con = new SqlConnection(constr);
SqlCommand cmm = new SqlCommand("Pkc", con);
//SqlCommand cm = new SqlCommand("PkI", con);
cmm.CommandType = CommandType.StoredProcedure;
// cm.CommandType = CommandType.StoredProcedure;
cmm.Parameters.Add("@pname", SqlDbType.NVarChar, 50).Value = drop1.SelectedValue;
cmm.Parameters.Add("@course", SqlDbType.NVarChar, 50).Value = check1.SelectedValue;
con.Open();
cmm.ExecuteNonQuery();
con.Close();
}
您的存储过程中未列出的代码是什么?
但是,通过查看Button1_Click代码,我很惊讶您将参数值作为NVarChar传递给存储过程。 通常,表的主键和外键将是整数,有时甚至是GIUD。
您需要做的第一件事是验证您从drop1和check11控件返回的内容。 您应该在代码行上放置一个断点,将值分配给参数。 执行中断时,检查每个控件返回的值。 如果它们没有返回有效值,则在page_load事件中的代码中检查绑定到下拉控件的数据。
如果返回的值有效,则错误出在您的存储过程或要在其中存储数据的表中。表中的外键值与其他两个表中的主键值具有相同的数据类型吗? ? 您的存储过程中是否存在编码错误?
希望这可以帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.