私のコードで何か奇妙なことが起こりました。実際には、クエリ文字列の ID 値を 2 番目のページに渡すハイパーリンクがあります。データリストに sth を表示します。
別の言い方をすれば、ハイパーリンクを持つ最初のページがあり、データソースから ID 値を読み取り、それを 2 番目のページに渡します。以下のようになります。
<asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl='<%# "~/forumpage.aspx?ID="+Eval("ID")%>'><%#Eval("title")%> </asp:HyperLink>
次に、2番目のページに、このようなクエリを持つ1つのSQLデータソースがあります...where ID=@id db.itからクエリ文字列でこのIDを取得すると、うまくいきます。しかし、私は2番目のページの2番目のSQLデータソースに問題があり、以下のようなクエリsthがあります:... forms.question_id = @id次に、ハイパーリンクの最初のページで取得するIDとして両方のクエリ文字列をSQLで参照します。しかし、挿入ボタンをクリックすると、fkでエラーが表示されます。
エラー: エラー: INSERT ステートメントが FOREIGN KEY 制約 "FK_forumreply_forumquestions" と競合しました。データベース「フォーラム」、テーブル「dbo.forumquestions」、列「ID」で競合が発生しました。ステートメントは終了されました。
私のテーブル
- (質問(ID,user_id(fk),Cat_id(fk),タイトル,本文)
- (reply(ID,userr_id(fk),questionn_id(fk),titlereply,bodytestreply);
cb で手動で questionn_id に 1 のような数値を指定すると、成功したことが示されますが、データソースによるフィルターから読み取りたい場合、このフィールドは問題に直面します。
plzzzz助けてください、私は本当にこの部分からスキップする必要があります.そして、私は新しいので、論理的な方法を明確に理解できないと思います.
<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>
挿入ボタンの 2 ページ目は 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");
}
}