C#的有关异常的处理以及从数据库中删除某个
答案:3 悬赏:20 手机版
解决时间 2021-05-02 04:50
- 提问者网友:两耳就是菩提
- 2021-05-01 21:17
1、//下面是我要将数据库表 classmate中学号为num(varchar型)的学生的数据删除代码,但编译是出现转化为整型数据异常,因为我的学号是11位,麻烦高手帮我该一下使他能成功运行。还有帮我解释一下cmd.ExecuteNonQuery()方法。
conn.Open()
string sqlString = "delete from classmate where Number=" + num;
cmd.ExecuteNonQuery();
MessageBox.Show("学号:"+num+"学生的信息删除成功删除成功!");
conn.Close();
2、//下面是自定义的一个查找表 classmate中是否含学号为num的方法
其思想就是用SqlDataReader sdr = cmd.ExecuteReader();去读,然后判断他是否可读即是否为true 。不知道这样的想法对不对,麻烦高手帮我分析一下。因为我这句sdr.Read() == true会出现异常:从数据类型 nvarchar 转换为 numeric 时出错。
private bool isHad(string number)//判断是否存在
{
bool flag = false;
string sqlString = "select * from classmate where Number=" + number;
cmd = new SqlCommand(sqlString, conn);
SqlDataReader sdr = cmd.ExecuteReader();
if (sdr.Read() == true)
{
flag = true;
}
conn.Close();
return flag;
}
最佳答案
- 五星知识达人网友:有你哪都是故乡
- 2021-05-01 21:26
问题1:将数据表中的学号字段 修改为long类型 即可 原因是超出int范围 int范围为: -2,147,483,647~+ 2,147,483,647 你11位的学号字段 应该采用long类型
问题2:
通过你的异常提示来看 应该是 sql查询语句中的number值 与数据表中number字段的类型不一致造成的
请检查下 还有 按您的思路去写 是可以的 但是您sdr.Read() 后忘记了关闭 应加上cmd.ExecuteReader(CommandBehavior.CloseConnection);
而且不建议这样去写 没有b必要 也正如楼上所说 没有效率
object result =cmd.ExecuteScalar();
if(result!=null)
{
return true;
}
即可
全部回答
- 1楼网友:傲气稳了全场
- 2021-05-01 22:55
string sqlString = "delete from classmate where Number=" + num;
这个错了,应该加上单引号的,因为num(varchar型),所以应写成:
string sqlString = "delete from classmate where Number=' " + num +" ';
第二个方法错误
if (sdr.Read() == true)
{
flag = true;
}
既然你用了SqlDataReaer,那就应该知道
Read()方法不是布尔值类型的,所以sdr.Read()=true是错误的
- 2楼网友:行路难
- 2021-05-01 21:56
private bool isHad(string number)//判断是否存在
{
bool flag = false;
string sqlString = "select count(*) from classmate where Number=" + number;
cmd = new SqlCommand(sqlString, conn);
conn.Open();
int n =(int) cmd.ExecuteScalar();
conn.Close();
if (n>0)
return true;
return flag;
}
这样效率更高
1题的问题应该是你的数据已经超过了int型的范围了
-2147483648到2147483647
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯