奇怪的问题

hangang7403 2008-01-08 08:45:26

运行程序出现如下异常信息,但是仍能在数据库中插入一条记录
“/ST_WebCourse”应用程序中的服务器错误。
--------------------------------------------------------------------------------

违反了 PRIMARY KEY 约束 'PK_ST_DeptInfo'。不能在对象 'ST_DeptInfo' 中插入重复键。语句已终止。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.Data.SqlClient.SqlException: 违反了 PRIMARY KEY 约束 'PK_ST_DeptInfo'。不能在对象 'ST_DeptInfo' 中插入重复键。语句已终止。

源错误:


行 78: if(Request["Ation"]=="add")
行 79: {
行 80: st_dept.ST_InsertDeptInfo(txtName.Text.ToString(),int.Parse(txtNumber.Text));
行 81: }
行 82: else


源文件: c:\inetpub\wwwroot\st_webcourse\st_deptadd.aspx.cs 行: 80

堆栈跟踪:


[SqlException: 违反了 PRIMARY KEY 约束 'PK_ST_DeptInfo'。不能在对象 'ST_DeptInfo' 中插入重复键。
语句已终止。]
System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
ST_CourseBiz.ST_Dept.ST_InsertDeptInfo(String ST_DeptName, Int32 ST_DeptID) in c:\documents and settings\administrator\my documents\visual studio projects\st_webcourse\st_coursebiz\st_dept.cs:55
ST_WebCourse.ST_DeptAdd.btnOK_Click(Object sender, EventArgs e) in c:\inetpub\wwwroot\st_webcourse\st_deptadd.aspx.cs:80
System.EventHandler.Invoke(Object sender, EventArgs e) +0
System.Web.UI.WebControls.Button.OnClick(EventArgs e)
System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument)
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument)
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData)
System.Web.UI.Page.ProcessRequestMain()


去掉字段的主键设置,没有异常信息提示,但是却一次插入数据库两条相同的记录,请教高手为什么?怎么解决?急 急 急



--------------------------------------------------------------------------------
版本信息: Microsoft .NET Framework 版本:1.1.4322.2407; ASP.NET 版本:1.1.4322.2407
...全文
77 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
hangang7403 2008-01-08
  • 打赏
  • 举报
回复
有事下线,望各位大侠多多指点
hangang7403 2008-01-08
  • 打赏
  • 举报
回复
我检查了很多遍了,真是发现不了问题所在,所以才找各位高手帮帮忙?
woshiccye_msdn 2008-01-08
  • 打赏
  • 举报
回复
首先,从你的异常来看是插入了具有相同主键的两条记录引起的.
当你去掉主键约束后,不存在插入相同主键的两条记录的问题,因而不会有异常,但插入了两条相同记录,
此时问题就很明显了,建议把你的程序check下,逻辑问题,引起一下插入两条记录.

希望对你有所帮助!
hangang7403 2008-01-08
  • 打赏
  • 举报
回复
不好意思,下面可能多加了一个括号,不过原代码没有问题
hangang7403 2008-01-08
  • 打赏
  • 举报
回复
下面是我的添加按钮的单击事件代码
protected void btnOK_Click(object sender, System.EventArgs e)
{
if(txtName.Text=="")
{
Response.Write("<script >alert('名称不允许为空');</script>");
}
else if(txtName.Text.Length>20)
{
Response.Write("<script >alert('最多20个字符');</script>");
}
else
{
ST_CourseBiz.ST_Dept st_dept=new ST_CourseBiz.ST_Dept();
if(Request["Ation"]=="add")
{
st_dept.ST_InsertDeptInfo(txtName.Text.ToString(),int.Parse(txtNumber.Text));
}
else
{
st_dept.ST_UpdateDeptInfo(txtName.Text.Trim(),int.Parse(txtNumber.Text));
string str="<script language=javascript>window.dialogArguments.document.location.href='ST_Dept.aspx';window.close();</script>";
Response.Write(str);
}

}

}

}
rangeon 2008-01-08
  • 打赏
  • 举报
回复
应该不是SQL语句的问题,是事件处理代码的问题
hangang7403 2008-01-08
  • 打赏
  • 举报
回复
但是代码在哪里出的问题呢,我检查不出来,请教一下在哪个地方会出现问题
rangeon 2008-01-08
  • 打赏
  • 举报
回复
代码问题,因为你的程序一次写入两条相同记录,当然会违反主键约束
hangang7403 2008-01-08
  • 打赏
  • 举报
回复
SQL语句:
public void ST_InsertDeptInfo(string ST_DeptName,int ST_DeptID)
{
string sqlstring="insert into ST_DeptInfo(ST_DeptName, ST_DeptID,ST_IsDeleted ) values('"+ST_DeptName+"','"+ST_DeptID+"',1) ";
//SqlHelper.ExecuteNonQuery(st_SqlString,CommandType.Text,sqlstring);
conn.Open();
SqlCommand cmd=new SqlCommand (sqlstring,conn);
cmd.ExecuteNonQuery();
conn.Close();

}
liq330 2008-01-08
  • 打赏
  • 举报
回复
应该是SQL语句写错了吧.

62,041

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧