C#如何判断输入在文本框内的数据是否存在数据库中??

SqlConnectionconn;privatevoidFormDepartmentFilesFind_Load(objectsender,EventArgse)//窗... SqlConnection conn;
private void FormDepartmentFilesFind_Load(object sender, EventArgs e)//窗体
{
conn = new SqlConnection("server=172.16.43.55;database=CateringDB;uid=sa;pwd=123456");//连接数据库
}

private void button1_Click(object sender, EventArgs e)//“查找”按钮
{
if (Textname.Text == "")
{
MessageBox.Show("部门名称不能为空,请输入部门名称");
}
else
{
conn.Open();//打开数据库连接
SqlCommand cmd = new SqlCommand("select * from tbl_Department_Info where deptName='" + Textname.Text.Trim() + "'", conn);
SqlDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
//将在数据库中查询到的信息显示出来
listView1.Items.Add(reader[0].ToString());
listView2.Items.Add(reader[1].ToString());
listView3.Items.Add(reader[2].ToString());
listView4.Items.Add(reader[3].ToString());
listView5.Items.Add(reader[4].ToString());
}
if (!reader.Read())
{
MessageBox.Show("此部门不存在");
}
else
{
button1.Enabled = false;//使按钮不可点击
}
conn.Close();
}
}
查找不存在的部门时是正确的
但是查找存在的部门时还是会弹出提示框
求大神指点下!!!
展开
 我来答
韩福洁
2013-12-19 · TA获得超过623个赞
知道小有建树答主
回答量:129
采纳率:100%
帮助的人:63万
展开全部
这个你可以在if (!reader.Read())处下断点看看read.Read()执行的记过是什么。

或者把 button1_Click里面的else改成我写的试试:
else
{
conn.Open();//打开数据库连接
SqlCommand cmd = new SqlCommand("select * from tbl_Department_Info where deptName='" + Textname.Text.Trim() + "'", conn);
SqlDataReader reader = cmd.ExecuteReader();
if (reader.Read())
{
//将在数据库中查询到的信息显示出来
listView1.Items.Add(reader[0].ToString());
listView2.Items.Add(reader[1].ToString());
listView3.Items.Add(reader[2].ToString());
listView4.Items.Add(reader[3].ToString());
listView5.Items.Add(reader[4].ToString());

button1.Enabled = false;//使按钮不可点击
}
else
{
MessageBox.Show("此部门不存在");
}
read.Close();---read打开了要关闭
conn.Close();
}
更多追问追答
追问
试过了,可以,谢谢,reader.Close()这个为什么一定要关闭了?没关闭会有什么后果吗?
追答
就行conn打开了不用也要关闭一样,这个开着不关闭貌似就不会释放占用的内存,若果不关闭的话在下次再使用read()方法的时候会报错。
toshiojkx
2013-12-19 · TA获得超过492个赞
知道小有建树答主
回答量:260
采纳率:100%
帮助的人:105万
展开全部
while (reader.Read())运行完以后reader.Read()一定返回false
而你下面又if (!reader.Read()) MessageBox.Show("此部门不存在");
所以必定会弹出不存在的提示框
更多追问追答
追问
遍历打印是把找到的那一行数据打印出来。
那怎么加一个标记进行判断?
追答
while (reader.Read()) 
 {
    //将在数据库中查询到的信息显示出来
    listView1.Items.Add(reader[0].ToString());
    listView2.Items.Add(reader[1].ToString());
    listView3.Items.Add(reader[2].ToString());
    listView4.Items.Add(reader[3].ToString());
    listView5.Items.Add(reader[4].ToString());
}
if (!reader.Read())
{
    MessageBox.Show("此部门不存在");
}

改成

if(reader.Read())
{
    //将在数据库中查询到的信息显示出来
    listView1.Items.Add(reader[0].ToString());
    listView2.Items.Add(reader[1].ToString());
    listView3.Items.Add(reader[2].ToString());
    listView4.Items.Add(reader[3].ToString());
    listView5.Items.Add(reader[4].ToString());
}
else
{
    MessageBox.Show("此部门不存在");
}

 这样的话如果有数据就显示,没有数据就提示不存在

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
热情的梵人
2013-12-19 · TA获得超过199个赞
知道小有建树答主
回答量:216
采纳率:0%
帮助的人:100万
展开全部
// 下面这一句判断方法不对。
if (!reader.Read())
{
MessageBox.Show("此部门不存在");
}

改成
if(listView1.Items.Count <=0){

MessageBox.Show("此部门不存在");
}
更多追问追答
追问
成功了,谢谢!!!,,我已经知道错在哪了,那这么改有什么根据吗?
追答
while(reader.Read() )  

当reader.Read()为false时,循环语句会退出,while都退出了reader.Read()永远为false,此时你还用它来判断是否有数据?是不正确的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-12-19
展开全部
我认为是缺少reader.Close();这个方法不能丢。你试试
更多追问追答
追问
哦,为什么呢?
追答
你把if (reader==Null) 替换if (!reader.Read())肯定对
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式