Sql 使用hyperlik传递ID,但在单击“插入”时无法从一个表中的fk获取此ID值
在我的代码中发生了一些奇怪的事情,实际上我有一个超链接,它将查询字符串中的ID值传递给第二个页面。在第二个页面中,我有两个sql数据源,这两个sql数据源都应该获取该ID值,并将其传递给过滤器参数,以便在数据列表中显示某个内容 换句话说,我有一个第一个页面,它有一个从数据源读取的超链接ID值,并将其传递给第二个页面。如下所示:Sql 使用hyperlik传递ID,但在单击“插入”时无法从一个表中的fk获取此ID值,sql,foreign-keys,conflict,Sql,Foreign Keys,Conflict,在我的代码中发生了一些奇怪的事情,实际上我有一个超链接,它将查询字符串中的ID值传递给第二个页面。在第二个页面中,我有两个sql数据源,这两个sql数据源都应该获取该ID值,并将其传递给过滤器参数,以便在数据列表中显示某个内容 换句话说,我有一个第一个页面,它有一个从数据源读取的超链接ID值,并将其传递给第二个页面。如下所示: <asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl='<%# "~/forumpage.asp
<asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl='<%# "~/forumpage.aspx?ID="+Eval("ID")%>'><%#Eval("title")%> </asp:HyperLink>
然后在第二页中,我有一个sql数据源,它有一个类似这样的查询…其中ID=@ID,并从db的查询字符串中获取这个ID。它工作得很好。但我对第二页中的第二个sql数据源有问题,它有一个如下的查询:…forms.question_id=@id
然后在sql中引用这两个查询字符串作为超链接中第一页获取的ID。
但当我点击插入按钮时,显示fk错误
错误:错误:INSERT语句与外键冲突
约束“FK\u forumreply\u forumquestions”。冲突发生在
数据库“论坛”,表“dbo.forumquestions”,列“ID”。这个
声明已终止
我的桌子
<asp:SqlDataSource ID="sdsreply" runat="server"
ConnectionString="<%$ ConnectionStrings:forumConnectionString %>"
SelectCommand="SELECT forumreply.ID, forumreply.userr_id, forumreply.questionn_id, forumreply.bodytextreply, forumreply.datetimereply, forumquestions.ID AS Expr1, forumusers.ID AS Expr2, forumusers.username FROM forumquestions INNER JOIN forumreply ON forumquestions.ID = forumreply.questionn_id INNER JOIN forumusers ON forumquestions.user_id = forumusers.ID AND forumreply.userr_id = forumusers.ID where forumreply.questionn_id=@questionn_id">
<SelectParameters>
<asp:QueryStringParameter Name="questionn_id" QueryStringField="ID" />
</SelectParameters>
</asp:SqlDataSource>
插入按钮中的第二页为cb:
{
if (Session["userid"] != null)
{
lblreply.Text = Session["userid"].ToString();
}
else
{
Session["userid"]=null;
}
if (HttpContext.Current.User.Identity.IsAuthenticated)
{
lblshow.Text = string.Empty;
string d = HttpContext.Current.User.Identity.Name;
lblshow.Text =d + "عزیز خوش آمدید." ;
foreach (DataListItem item in DataList2.Items)
{
Label questionn_idLabel = (Label)item.FindControl("questionn_idLabel");
Label userr_idLabel = (Label)item.FindControl("userr_idLabel");
lbltest.Text = string.Empty;
lbltest.Text = questionn_idLabel.Text;
lblreply.Text = string.Empty;
lblreply.Text = userr_idLabel.Text;
}
}
else
{
lblshow.Text = "اگر بار اول هست که می خواهید پاسخ دهید لطفا ابتدا ثبت نام و سپس لاگین فرمائید.";
}
}
{
if(HttpContext.Current.User.Identity.IsAuthenticated)
{
if (Page.IsValid)
{
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["forumConnectionString"].ConnectionString);
try
{
con.Open();
SqlCommand cmd = new SqlCommand("insert into forumreply (userr_id,questionn_id,bodytextreply,datetimereply)values(@userr_id,@questionn_id,@bodytextreply,@datetimereply)", con);
cmd.Parameters.AddWithValue("userr_id",lblreply.Text);
cmd.Parameters.AddWithValue("questionn_id",lbltest.Text);
cmd.Parameters.AddWithValue("bodytextreply",txtbody.Text);
cmd.Parameters.AddWithValue("datetimereply",DateTime.Now );
cmd.ExecuteNonQuery();
}
catch (Exception exp)
{
Response.Write("<b>Error:</b>");
Response.Write(exp.Message);
}
finally
{
con.Close();
}
lblmsg.Text = "پیام شما با موفقیت ثبت گردید.thx";
lblshow.Visible = false;
//lbltxt.Text = txtbody.Text;
txtbody.Text = string.Empty;
}
}
else
{
lblmsg.Text = string.Empty;
Session["rem"] = Request.UrlReferrer.AbsoluteUri;
Response.Redirect("~/login.aspx");
}
}
{
if(会话[“userid”]!=null)
{
lblreply.Text=Session[“userid”].ToString();
}
其他的
{
会话[“userid”]=null;
}
if(HttpContext.Current.User.Identity.IsAuthenticated)
{
lblshow.Text=string.Empty;
字符串d=HttpContext.Current.User.Identity.Name;
lblshow.Text=d+“第二个字母”;
foreach(DataList2.Items中的DataListItem项)
{
Label questionn_idLabel=(Label)item.FindControl(“questionn_idLabel”);
Label userr_idLabel=(Label)item.FindControl(“userr_idLabel”);
lbltest.Text=string.Empty;
lbltest.Text=问题n_idLabel.Text;
lblreply.Text=string.Empty;
lblreply.Text=userr\u idLabel.Text;
}
}
其他的
{
此外,还路路路路路路路路路路邦。文本方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方پ;
}
}
{
if(HttpContext.Current.User.Identity.IsAuthenticated)
{
如果(第页有效)
{
SqlConnection con=新的SqlConnection(ConfigurationManager.ConnectionString[“forumConnectionString”].ConnectionString);
尝试
{
con.Open();
SqlCommand cmd=new SqlCommand(“插入forumreply(userr\u id、questionn\u id、bodytextprey、datetimereply)值(@userr\u id、@questionn\u id、@bodytextprey、@datetimereply)”,con);
cmd.Parameters.AddWithValue(“userr\u id”,lblreply.Text);
cmd.Parameters.AddWithValue(“问题编号”,lbltest.Text);
cmd.Parameters.AddWithValue(“bodytextreply”,txtbody.Text);
cmd.Parameters.AddWithValue(“datetimereply”,DateTime.Now);
cmd.ExecuteNonQuery();
}
捕获(异常扩展)
{
响应。写入(“错误:”;
响应。写入(exp.Message);
}
最后
{
con.Close();
}
lblmsg.Text=“پ;
lblshow.Visible=false;
//lbltxt.Text=txtbody.Text;
txtbody.Text=string.Empty;
}
}
其他的
{
lblmsg.Text=string.Empty;
会话[“rem”]=Request.urlReferer.AbsoluteUri;
重定向(“~/login.aspx”);
}
}
冷静!我们需要首先调查问题错误提到了INSERT。您发布的代码没有。您是否缺少一些代码?INSERT
语句与您的表定义不匹配。您指定的两个表中哪一个是forumreply
?您需要确保INSERT语句的列是atch表中的任何内容。您的数据库中有一个外键约束…FK_forumreply_forumquestions…此约束迫使插入失败…问题与从表中读取无关…检查该约束…在外键方面,您可能尝试插入插入的主键在inser中不存在当我写cmd.paramaters.addwithvalue(“questionn_id”,“1”)时,t按钮类似于1的数字,它工作良好,可以插入,但当我想从包含eval(question_id)的数据列表行中读取此字段并将其放入标签时,它会显示错误。我只是遇到了此fk问题。它无法从数据列表控件读取。