使用Asp.net的聊天应用程序给出数据库错误

时间:2013-10-13 12:08:47

标签: c# asp.net sql ajax linq-to-sql

我正在使用AJAX,LINQ to SQL和一些用于身份验证的安全功能在ASP.NET中创建聊天应用程序。聊天将根据特定组进行。我尝试登录聊天后收到错误页面(default.aspx,在我的项目中), 错误是:

  

“INSERT语句与FOREIGN KEY约束冲突”FK_tbmsg_tbusr2“。冲突发生在数据库”test“,表”dbo.tbusr“,列'usrcod'中。   声明已经终止。“

注意:tbmsg是用于存储有关消息的数据的表,而tbusr用于存储有关用户的数据。 Default.aspx的后端代码是:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.Security;
using System.Text;

public partial class _Default : System.Web.UI.Page
{
    chatDataContext obj = new chatDataContext();
    protected void Page_Load(object sender, EventArgs e)
    {
        if (Page.IsPostBack == false)
        {
            Label1.Text = "Welcome:" + Session["usrnam"].ToString();
            Insert_Msg("Just Login:");
            GetLoggedUser();
            Get_Msg();
        }
    }
    private void Insert_Msg(String m)
    {
        tbmsg k = new tbmsg { msgdsc = m, msgdat = DateTime.Now, msgfrmusrcod = Convert.ToInt32(Session["usrcod"]), msgtousrcod = null, msggrpcod = Convert.ToInt32(Request.QueryString["grpcod"]) };
        obj.tbmsgs.InsertOnSubmit(k);
        obj.SubmitChanges();
    }
    private void Get_Msg()
    {
        var q = from p in obj.tbmsgs
                where p.msggrpcod == Convert.ToInt32(Request.QueryString["grpcod"])
                select p;
        StringBuilder sb = new StringBuilder();
        foreach (var t in q)
        {
            sb.Append(t.msgdsc + ":" + t.msgdat.ToString() + ":" + t.tbusr.usrnam + "<br/>");
        }
        ltmsg.Text = sb.ToString();


    }
    private void GetLoggedUser()
    {
        var q = (from p in obj.tblogusrs where p.logusrusrcod == Convert.ToInt32(Session["usrcod"]) select p).SingleOrDefault();
        if (q == null)
        {
            tblogusr x = new tblogusr { logusrusrcod = Convert.ToInt32(Session["usrcod"]), logusrgrpcod = Convert.ToInt32(Request.QueryString["grpcod"]) };
            obj.tblogusrs.InsertOnSubmit(x);
            obj.SubmitChanges();
        }
        StringBuilder sb = new StringBuilder();
        var q1 = from p in obj.tblogusrs where p.logusrgrpcod == Convert.ToInt32(Request.QueryString["grpcod"]) select p;
        foreach (var t in q1)
        {
            sb.Append(t.tbusr.usrnam + "<br/>");
        }
        ltuser.Text = sb.ToString();
    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        if (TextBox1.Text.Length > 0)
        {
            Insert_Msg(TextBox1.Text);
            TextBox1.Text = String.Empty;
            TextBox1.Focus();
        }
    }
    protected void Button2_Click(object sender, EventArgs e)
    {
        var q = (from p in obj.tblogusrs where p.logusrusrcod == Convert.ToInt32(Session["usrcod"]) select p).SingleOrDefault();
        if (q != null)
        {
            obj.tblogusrs.DeleteOnSubmit(q);
            obj.SubmitChanges();
        }
        Insert_Msg("Just Logout:");
        FormsAuthentication.SignOut();
        Response.Redirect("login.aspx");
    }
    protected void Timer1_Tick(object sender, EventArgs e)
    {
        Get_Msg();
        GetLoggedUser();
    }
}

HTML代码:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
        <head runat="server">
           <title></title>
           <style type="text/css">
        .auto-style1
        {
            width: 70%;
            height: 25px;
        }
        .auto-style2
        {
            height: 25px;
        }
    </style>
    </head>
    <body>
    <form id="form1" runat="server">
    <div style="height: 286px; width: 849px">

        <asp:ScriptManager ID="ScriptManager1" runat="server">
        </asp:ScriptManager>
        <br />
        <br />
        <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
        <br />
        <br />
        <br />
        <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
            <ContentTemplate>
                <asp:Timer ID="Timer1" runat="server" Interval="1000" OnTick="Timer1_Tick">
                </asp:Timer>
                <table border="5" style="width: 100%; margin-right: 0px">
                    <tr>
                        <td width="30%" class="auto-style2">
                            <asp:Literal ID="ltuser" runat="server" />
                        </td>
                       <td class="auto-style1">
                           <asp:Literal ID="ltmsg" runat="server" />
                       </td>
                    </tr>
                </table>
                <br />
                &nbsp;
            </ContentTemplate>
            <Triggers>
                <asp:AsyncPostBackTrigger ControlID="Timer1" EventName="Tick" />
            </Triggers>
        </asp:UpdatePanel>

    </div>
        <asp:UpdatePanel ID="UpdatePanel2" runat="server" UpdateMode="Conditional">
            <ContentTemplate>
                <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
                &nbsp;<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Send" />
                <br />
                <asp:Button ID="Button2" runat="server" OnClick="Button2_Click" Text="Logout" />
            </ContentTemplate>
        </asp:UpdatePanel>
    </form>
</body>
</html>

tbusr表的说明:

usrcod     int   primary key (auto increment)

usrnam     varchar(50)

usrpwd     varchar(50)

tbmsg表的描述:

msgcod     int   primary key (auto increment)

msgdsc     varchar(100)

msgdat     datetime

msgfrmusrcod   int (foreign key with usrcod of tbusr)

msgtousrcod    int (foreign key with usrcod of tbusr)

msggrpcod      int (foreign key with grpcod of tbgrp)

注意:tbgrp是另一个用于存储有关组

的数据的表

0 个答案:

没有答案