A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 盘晟 于 2013-5-14 12:33 编辑

代码如下:using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
namespace 练习案例
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private void Form1_Load(object sender, EventArgs e)
        {
        }
        private void IncErrorTimes()
        {
            using (SqlConnection conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=D:\360安全浏览器下载\第一个mdf\练习案例\Database2.mdf;Integrated Security=True;User Instance=True"))
            {
                conn.Open();
            using (SqlCommand updatecmd = conn.CreateCommand())
            {
                updatecmd.CommandText = "Update T_Users Set ErrorTimes=ErrorTimes+1 where UserName=@UserName";
                updatecmd.Parameters.Add(new SqlParameter("UserName", txtUserName.Text));
                updatecmd.ExecuteNonQuery();
            }
            }
        }

        private void RsetErrorTimes()
        {
            using (SqlConnection conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=D:\360安全浏览器下载\第一个mdf\练习案例\Database2.mdf;Integrated Security=True;User Instance=True"))
            {
                conn.Open();
                using (SqlCommand updatecmd = conn.CreateCommand())
                {
                    updatecmd.CommandText = "Update T_Users Set ErrorTimes=0 where UserName=@UserName";
                    updatecmd.Parameters.Add(new SqlParameter("UserName", txtUserName.Text));
                    updatecmd.ExecuteNonQuery();
                }
            }
        }
        private void button1_Click(object sender, EventArgs e)
        {
            using (SqlConnection conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=D:\360安全浏览器下载\第一个mdf\练习案例\Database2.mdf;Integrated Security=True;User Instance=True"))
            {
                conn.Open();
                using(SqlCommand cmd=conn.CreateCommand())
                {
                    cmd.CommandText = "select * from T_Users where UserName=@UserName";
                    cmd.Parameters.Add(new SqlParameter("UserName",txtUserName.Text));
                    cmd.ExecuteReader();
                  
                    using(SqlDataReader reader=cmd.ExecuteReader())
                    {
                        if (reader.Read())
                        {
                            int Errortimes=reader.GetInt32(reader.GetOrdinal("ErrorTimes"));
                            if (Errortimes > 3)
                            {
                                MessageBox.Show("登录次数过多,禁止登录!");
                                return;
                            }
                            string dbPassword = reader.GetString(reader.GetOrdinal("Password"));
                            if (dbPassword == txtPassword.Text)
                            {
                                MessageBox.Show("登录成功");
                                RsetErrorTimes();
                                
                            }
                            else
                            {
                                IncErrorTimes();
                                //在同一个连接中如果SqlDataReader没有关闭,是不能执行Update之类的语句的
                                //using(SqlCommand updatecmd=conn.CreateCommand())
                                //{
                                //    updatecmd.CommandText="Update T_Users Set ErrorTimes=ErrorTimes+1 where UserName=@UserName";
                                //    updatecmd.Parameters.Add(new SqlParameter("UserName",txtUserName.Text));
                                //    updatecmd.ExecuteNonQuery();
                                
                                MessageBox.Show("登录失败");
                            }
                        }
               
                    else
                        {
                            MessageBox.Show("登录失败");
                        }
                    }
                }
            }
        }
    }
}
运行的时候出现如下问题:
怎么办啊?真的找不到哪里错了!

3 个回复

倒序浏览
本帖最后由 李礼彬 于 2013-5-14 09:35 编辑

在使用 SqlDataReader时,关联的 SqlConnection 正忙于为 SqlDataReader服务,对 SqlConnection 无法执行任何其他操作,只能将其关闭。除非调用 SqlDataReader的 Close方法,否则会一直处于此状态
这个异常说的是先前有个DataReader已经打开了,必须先把它给关闭掉。要是打开DataReader两次。第一次一次是登陆错误的时候,这已经占用了DataReader,不关闭的话第二次再次登录的时候就会提示DataReader已打开。问题的根结就在第一次打开DataReader后要记得把它给关闭掉,释放资源。
回复 使用道具 举报
李礼彬 发表于 2013-5-14 09:32
在使用 SqlDataReader时,关联的 SqlConnection 正忙于为 SqlDataReader服务,对 SqlConnection 无法执行任 ...

额,原来是这样啊。问题找到了,原来前面的  cmd.ExecuteReader();打开了,去掉这句话以后就正常了!谢谢
回复 使用道具 举报
恩就是这句  cmd.ExecuteReader();不知道执行的是什么,估计你是大意写错了,。换个别的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马