Asp.net(C#) 如何抓 sql server 异常

muhan2008 2005-01-24 04:32:30
大虾们:
现在本人有一问题想请教,不知道大家有没有这方面的经验,就是如何在Asp.net(C#) 抓 sql server 异常,比如说:索引异常

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
服务器: 消息 2627,级别 14,状态 1,行 1
违反了 PRIMARY KEY 约束 'PK_HR_Act'。不能在对象 'HR_Act' 中插入重复键。
语句已终止。
这个是Sql Server 抓到的异常
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

但是我要把这个异常在Asp.net中抓到,并抛出这个异常,告诉用户此"用户名已经存在,请用别的用户名注册".另外如何判定Sql Server 特定的异常??请告之--在线等!!
...全文
342 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
muhan2008 2005-01-25
  • 打赏
  • 举报
回复
webserv2(GIS)(CAU) :你答对了,我要的就是这个!!给分!!!分不多,重在参与和技术交流,同时也谢谢大家!!!
kenMoxi 2005-01-25
  • 打赏
  • 举报
回复
呵呵!!!楼主,出错信息最好是自己写,显示给用户看!
而不要把系统出错的信息直接显示给用户!
ag1978 2005-01-25
  • 打赏
  • 举报
回复
在写入数据前,先检查一下是否存在用户名。
不必要把这个检查的功能交给数据库报错吧。
JymJoe 2005-01-25
  • 打赏
  • 举报
回复
try
{
感觉有错的地方
}

catch(Excrption a)
{
MessageBox.Shoe(a.Message);
}
试试吧 我也不知道行不行~!
但是我up
webserv2 2005-01-24
  • 打赏
  • 举报
回复
public int Create(string emailAddress,
byte[] password,
string firstName,
string lastName,
string address1,
string address2,
string city,
string state,
string zipCode,
string homePhone,
string country)
{
int rowsAffected;
SqlParameter[] parameters={
new SqlParameter("@EmailAddRess",SqlDbType.VarChar,255),
new SqlParameter("@Password", SqlDbType.Binary, 20),
new SqlParameter("@FirstName", SqlDbType.VarChar, 30),
new SqlParameter("@LastName", SqlDbType.VarChar, 50),
new SqlParameter("@Address1", SqlDbType.VarChar, 80),
new SqlParameter("@Address2", SqlDbType.VarChar, 80),
new SqlParameter("@City", SqlDbType.VarChar, 40),
new SqlParameter("@State", SqlDbType.VarChar, 2),
new SqlParameter("@ZipCode", SqlDbType.VarChar, 10),
new SqlParameter("@HomePhone", SqlDbType.VarChar, 14),
new SqlParameter("@Country", SqlDbType.VarChar, 50),
new SqlParameter("@UserID", SqlDbType.Int, 4)



} ;
parameters[0].Value=emailAddress;
parameters[1].Value = password;
parameters[2].Value = firstName;
parameters[3].Value = lastName;
parameters[4].Value = address1;
parameters[5].Value = address2;
parameters[6].Value = city;
parameters[7].Value = state;
parameters[8].Value = zipCode;
parameters[9].Value = homePhone;
parameters[10].Value = country;
parameters[11].Direction=ParameterDirection.Output;


try
{
RunProcedure("sp_accounts_CreateUser",parameters,out rowsAffected);
}
catch(SqlException e)
{
if (e.Number == 2601)
{
return (int)WebModules.Accounts.ProcResultCodes.AccountAlreadyOnFile;
}
else
{
throw new AppException("在执行存储过程Accounts_CreateUser时发生错误",e );
}
}

return (int)parameters[11].Value;

}



这里面的e.Number == 2601就是捕获的sql 异常号

也即是你所说的


"用户名已经存在,请用别的用户名注册".错误

对应的
服务器: 消息 2627,级别 14,状态 1,行 1
违反了 PRIMARY KEY 约束 'PK_HR_Act'。不能在对象 'HR_Act' 中插入重复键。
语句已终止。
这个是Sql Server 抓到的异常


其他的可以类推 在sql server 查好错误好!再在。net中对应处理
shooper 2005-01-24
  • 打赏
  • 举报
回复
那些具体的异常你还是自己写程序来控制把,这样做(由数据库出错来)是很危险的
cqcya 2005-01-24
  • 打赏
  • 举报
回复
try
{
CMD.Connection.Open();
CMD.ExecuteNonQuery();
myconn.Close();


}
catch(SqlException ex)
{
switch(ex.Errors[0].SQLState)
"XXXX":
this.Page.RegisterStartupScript("ErrorMessage","<SCRIPT>alert('messgee'))</SCRIPT>");
......
default:
this.Page.RegisterStartupScript("ErrorMessage","<script>alert('操作不当请与软件部联系!');</script>");
}
xxuu503 2005-01-24
  • 打赏
  • 举报
回复
可以逐渐筛选,不过我也觉得会死人的。其实让用户知道出错了,就可以了,至于你,可以messagebox.show看看,就知道什么错误了。让用户知道那么多干什么!没有意义!
FlyBirdInLife 2005-01-24
  • 打赏
  • 举报
回复
这样没法弄的,catch中存在很多异常,这样会死人的,你可以做一个异常页面,只要进入catch就定位到异常页面,如果比较少,倒是可以逐个筛选,msdn商全有
Ivony 2005-01-24
  • 打赏
  • 举报
回复
catch ( System.Data.SqlClient.SqlException )
cjzlxy 2005-01-24
  • 打赏
  • 举报
回复
关注...
muhan2008 2005-01-24
  • 打赏
  • 举报
回复
当然不可以了,这是针对所有异常,我要求的是针对特例的异常,比如说我抓到index异常,我就抛出index相对应的异常;如果是溢出就会针对溢出抛出相对应的溢出异常,也就说我要针对不同的Sql Server的异常抛出相应的异常(我以前在什么地方看到过),不知道大家可否帮我?
sean168 2005-01-24
  • 打赏
  • 举报
回复
try
{
CMD.Connection.Open();
CMD.ExecuteNonQuery();
myconn.Close();


}
catch
{
Response.Write("<script>history.back();alert('操作不当请与软件部联系!');</script>");
Response.End();
}
这样可以吗?

110,567

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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