| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 645 人关注过本帖
标题:[求助]报错
只看楼主 加入收藏
思远
Rank: 1
等 级:新手上路
帖 子:75
专家分:0
注 册:2007-4-25
收藏
 问题点数:0 回复次数:9 
[求助]报错
我做一个登陆界面,要用户名和密码,请问我如果在数据库里把用户名设为唯一约束,但是我注册新用户时,如果我注册的用户名和已经存在数据库中的用户名相同时,他报错,说违反了唯一约束
请问这个是不是要用异常处理?
搜索更多相关主题的帖子: 数据库 用户名 密码 界面 
2007-07-07 18:58
starapple
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2007-7-1
收藏
得分:0 

在连接数据库和执行SQL语句时把异常都抓住抛出来不要处理``界面就不要再抓异常了``


或者再注册按钮按下的时候再查询调用下SQL的查询方法``如果有值的话MessageBox.Show("XXX")就可以了`

2007-07-07 21:08
思远
Rank: 1
等 级:新手上路
帖 子:75
专家分:0
注 册:2007-4-25
收藏
得分:0 
我没有学异常哦,可不可以把代码发我看看!

2007-07-07 21:34
mlrh3838
Rank: 1
等 级:新手上路
威 望:1
帖 子:199
专家分:0
注 册:2007-6-14
收藏
得分:0 
try
{
.............
}
catch(ConstraintException) //主键约束异常 ( 用户名设为主键 )
{
MessageBox.Show("用户名已存在");
}

2007-07-07 21:45
mlrh3838
Rank: 1
等 级:新手上路
威 望:1
帖 子:199
专家分:0
注 册:2007-6-14
收藏
得分:0 

其实你做登录的时候可以先检测数据库 用户名字段是否存在,如存在再检测该条记录的密码是否与输入的密码相等

SqlCommand cmd = new SqlCommand(sql, con);
SqlDataReader reader = cmd.ExecuteReader();

//判断用户是否存在
if (!reader.HasRows)
{
MessageBox.Show("该账号不存在!", "提示:", MessageBoxButtons.OK, MessageBoxIcon.Error);
txtUsername.Text = string.Empty;
txtPassword.Text = string.Empty;
txtUsername.Focus();
return;
}
while (reader.Read())
{
//判断此用户的密码是否与数据库中的匹配
if (reader["password"].ToString().Trim() != txtPassword.Text.Trim().Replace("'", "_"))
{
MessageBox.Show("难道你忘记了密码了吗?", "提示:", MessageBoxButtons.OK, MessageBoxIcon.Error);
txtPassword.Text = string.Empty;
txtPassword.Focus();
return;
}
}


2007-07-07 21:50
思远
Rank: 1
等 级:新手上路
帖 子:75
专家分:0
注 册:2007-4-25
收藏
得分:0 
那。。。。。。。。是什么哦!

2007-07-07 21:53
思远
Rank: 1
等 级:新手上路
帖 子:75
专家分:0
注 册:2007-4-25
收藏
得分:0 
不是,这个登陆我知道,我的问题是比如我数据库中也有一个用户名为123,但是我在用123注册时他说违反了 PRIMARY KEY 约束 'PK__StuInfo__79A81403'。不能在对象 'StuInfo' 中插入重复键。
语句已终止。

2007-07-07 22:02
mlrh3838
Rank: 1
等 级:新手上路
威 望:1
帖 子:199
专家分:0
注 册:2007-6-14
收藏
得分:0 
我上边已经告诉你了

catch(ConstraintException) //主键约束异常 ( 用户名设为主键 )

ConstraintException 这就是主键约束异常

当然你用 Exception 抛出异常也行,但不提倡这么做,用ConstraintException直接检查主键异常更有效些

SqlException 也能抛出主键重复异常,但不一定是主键重复抛出的异常,可能SQL语句不对等

catch (ConstraintException ex)
{
MessageBox.Show("用户名重复", "提示::", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
catch (SqlException ex)
{
MessageBox.Show(ex.Message, "提示::", MessageBoxButtons.OK, MessageBoxIcon.Error);
}

[此贴子已经被作者于2007-7-7 22:31:03编辑过]


2007-07-07 22:24
思远
Rank: 1
等 级:新手上路
帖 子:75
专家分:0
注 册:2007-4-25
收藏
得分:0 
搞定了,谢谢了
//增加
private void btnAdd_Click(object sender, EventArgs e)
{
//信息不能为空
if (txtID.Text.Trim() == "" || txtName.Text.Trim() == ""||dtpTime .Text .Trim ()=="")
{
MessageBox.Show("信息没有填完整!","警告",MessageBoxButtons .OK ,MessageBoxIcon.Warning );
return;
}

//创建一个学生对象
Student m_Stu = new Student();

//把输入的内容赋给学生
m_Stu.StuID = txtID.Text;
m_Stu.StuName = txtName.Text;
if (radMale.Checked)
{
m_Stu.StuSex = "男";
}
else
{
m_Stu.StuSex = "女";
}
m_Stu.StuAge = dtpTime.Value.ToShortDateString ();
if (MessageBox.Show("是否增加学员信息?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Asterisk) == DialogResult.OK)
{
SqlConnection connection = new SqlConnection();
try
{
string strAdd = "insert StuInfo values('" + m_Stu.StuID + "','" + m_Stu.StuName + "','" + m_Stu.StuSex + "','" + m_Stu.StuAge + "')";
connection.ConnectionString = "server=4F141ACC49A245D;uid=sa;pwd=sa;database=Students";
connection.Open();
SqlCommand command = new SqlCommand(strAdd, connection);
command.ExecuteNonQuery();
//调用增加学员的方法
StuList.AddStu(m_Stu);
//把学员信息存放在一个数组中,并增加到listview的行中
string[] strValue = new string[4];
strValue[0] = m_Stu.StuID;
strValue[1] = m_Stu.StuName;
strValue[2] = m_Stu.StuSex;
strValue[3] = m_Stu.StuAge;
m_ViewItem = new ListViewItem(strValue);
lsvStuInfo.Items.Add(m_ViewItem);
}
catch (SqlException ex)
{
MessageBox.Show("学号已存在!");

}
finally
{
connection.Close();
}
}
}


2007-07-07 22:29
guoxhvip
Rank: 8Rank: 8
来 自:聖西羅南看臺
等 级:贵宾
威 望:44
帖 子:4052
专家分:135
注 册:2006-10-8
收藏
得分:0 
能不用异常的地方尽量不用异常 因为异常很占资源 LZ这个问题其实直接可以先查询数据库再用if判断一下,如果没有相同用户名再insert,否则就提示用户

愛生活 && 愛編程
2007-07-08 01:58
快速回复:[求助]报错
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.033600 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved