功能很简单,写过了今天来注册的时候有点问题,请各位帮指点指点呀
一:点击进入注册界面        private void 注册ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            panel2.Controls.Clear();
            m_Register = new Register();
            m_Register.TopLevel = false;
            panel2.Controls.Add(m_Register);
            m_Register.Show();
        }二:点击“注册”        UserData ud = new UserData();
        /// <summary>
        /// 注册用户
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btn_Submit_Click(object sender, EventArgs e)
        {
            if (txb_UserName.Text.Trim() != "")
            {
                bool exist = ud.ExistsUser(txb_UserName.Text.Trim());
                if (exist)
                {
                    MessageBox.Show("该用户已存在!");
                }
                else
                {
                    try
                    {
                        ud.InsertUser(txb_UserName.Text.Trim(), txb_UserPass.Text.Trim());
                        txb_UserName.Text = "";
                        txb_UserPass.Text = "";                        DataTable dt = new DataTable();
                        dt = ud.GetUserInfo();
                        ////设置GridView高度
                        //if (dt != null)
                        //{
                        //    int crow = dt.Rows.Count;
                        //    dgv_List.Height = (crow + 1) * 22 +31;
                        //}
                        dgv_List.DataSource = dt;
                        //把刚才添加的数据放到DataTable中(dt)
                        DataRow dr = dt.NewRow();
                        DataTable getDataTable = ud.GetUserInfoByName(txb_UserName.Text.Trim());
                        if (getDataTable != null)
                        {
                            dr[0] = getDataTable.Rows[0][0].ToString();
                            dr[1] = getDataTable.Rows[0][1].ToString();
                        }
                        dt.Rows.Add(dr);
                        dgv_List.DataSource = dt;                        MessageBox.Show("注册成功!");
                    }
                    catch
                    {
                        MessageBox.Show("注册失败!");
                    }
                }
            }
            else
            {
                MessageBox.Show("用户名不能为空!");
            }
        }三、类文件using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Data.SqlClient;
using System.Windows.Forms;
using System.Collections.Generic;
using System.Text;namespace OPP.BaseClass
{
    /// <summary>
    /// 摘要说明
    /// </summary>
    public class DataAccess
    {
        #region 申明私有变量;
        private SqlConnection sqlConn;
        #endregion        #region 构造函数
        public DataAccess(string connectionString)
        {
            if (sqlConn == null)
            {
                sqlConn = new SqlConnection(connectionString);
            }
        }        public DataAccess()
        {            string connectionString = System.Configuration.ConfigurationSettings.AppSettings["connectionstring"];
            if (sqlConn == null)
            {
                sqlConn = new SqlConnection(connectionString);
            }        }
        #endregion        #region 生成SqlCommand
        private SqlCommand BuildCommand(string sen, CommandType Type)
        {
            SqlCommand command = new SqlCommand();
            command.Connection = sqlConn;
            command.CommandText = sen;
            command.CommandType = Type;
            return command;
        }
        private SqlCommand BuildCommand(string sen, CommandType Type, SqlParameter[] parameters)
        {
            SqlCommand command = new SqlCommand();            command.Connection = sqlConn;
            command.CommandText = sen;
            command.CommandType = Type;            foreach (SqlParameter parameter in parameters)
            {
                command.Parameters.Add(parameter);
            }
            return command;
        }
        public SqlCommand BuildQueryCommand(string ProcedureName, IDataParameter[] parameters)
        {
            SqlCommand command = new SqlCommand(ProcedureName, sqlConn);
            command.CommandType = CommandType.StoredProcedure;
            foreach (SqlParameter parameter in parameters)
            {
                command.Parameters.Add(parameter);
            }
            return command;
        }
        #endregion        #region  运行存储过程,对数据表进行操作
        public void RunProcedure(string ProcedureName)
        {
            SqlCommand command = BuildCommand(ProcedureName, CommandType.StoredProcedure);            sqlConn.Open();
            command.ExecuteNonQuery();
            sqlConn.Close();            command.Dispose();
        }
        public void RunProcedure(string ProcedureName, SqlParameter[] parameters)
        {
            SqlCommand command = BuildCommand(ProcedureName, CommandType.StoredProcedure, parameters);            sqlConn.Open();
            command.ExecuteNonQuery();
            sqlConn.Close();            command.Dispose();
        }        public SqlDataReader RunProcedureReader(string ProcedureName, IDataParameter[] parameters)
        {
            SqlDataReader returnReader;            sqlConn.Open();
            SqlCommand command = BuildQueryCommand(ProcedureName, parameters);
            command.CommandType = CommandType.StoredProcedure;            returnReader = command.ExecuteReader();
            return returnReader;
        }        public int RunProcedureToValue(string ProcedureName)
        {
            SqlCommand command = BuildCommand(ProcedureName, CommandType.StoredProcedure);            command.Parameters.Add(new SqlParameter("ReturnValue", SqlDbType.Int, 4, ParameterDirection.ReturnValue,
                false, 0, 0, string.Empty, DataRowVersion.Default, null));            sqlConn.Open();
            command.ExecuteNonQuery();
            int result = (int)command.Parameters["ReturnValue"].Value;
            sqlConn.Close();            command.Dispose();
            return result;
        }
        public int RunProcedureToValue(string ProcedureName, SqlParameter[] parameters)
        {
            SqlCommand command = BuildCommand(ProcedureName, CommandType.StoredProcedure, parameters);            command.Parameters.Add(new SqlParameter("ReturnValue", SqlDbType.Int, 4, ParameterDirection.ReturnValue,
                false, 0, 0, string.Empty, DataRowVersion.Default, null));            [color=#FF0000]sqlConn.Open();[code=C#]//就是这里报错了,
            command.ExecuteNonQuery();
            int result = (int)command.Parameters["ReturnValue"].Value;
            sqlConn.Close();            command.Dispose();            return result;
        }

解决方案 »

  1.   

       接上
         public DataSet RunProcedureToDs(string ProcedureName)
            {
                DataSet ds = new DataSet();
                SqlCommand command = BuildCommand(ProcedureName, CommandType.StoredProcedure);
                SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(command);            sqlConn.Open();
                sqlDataAdapter.Fill(ds);
                sqlConn.Close();            command.Dispose();
                sqlDataAdapter.Dispose();            return ds;
            }
            public DataSet RunProcedureToDs(string ProcedureName, SqlParameter[] parameters)
            {
                DataSet ds = new DataSet();
                SqlCommand command = BuildCommand(ProcedureName, CommandType.StoredProcedure, parameters);
                SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(command);            sqlConn.Open();
                sqlDataAdapter.Fill(ds);
                sqlConn.Close();            command.Dispose();
                sqlDataAdapter.Dispose();            return ds;
            }        public DataTable RunProcedureToDt(string ProcedureName)
            {
                DataTable dt = new DataTable();
                SqlCommand command = BuildCommand(ProcedureName, CommandType.StoredProcedure);
                SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(command);            sqlConn.Open();
                sqlDataAdapter.Fill(dt);
                sqlConn.Close();            command.Dispose();
                sqlDataAdapter.Dispose();            return dt;
            }
            public DataTable RunProcedureToDt(string ProcedureName, SqlParameter[] parameters)
            {
                DataTable dt = new DataTable();
                SqlCommand command = BuildCommand(ProcedureName, CommandType.StoredProcedure, parameters);
                SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(command);            sqlConn.Open();
                sqlDataAdapter.Fill(dt);
                sqlConn.Close();            command.Dispose();
                sqlDataAdapter.Dispose();            return dt;
            }
            #endregion        #region  运行SQL语句,对数据表进行操作
            public void RunSql(string Sqlsen)
            {
                SqlCommand command = BuildCommand(Sqlsen, CommandType.Text);
                command.Connection = sqlConn;            sqlConn.Open();
                command.ExecuteNonQuery();
                sqlConn.Close();            command.Dispose();
            }
            public DataSet RunSqlToDs(string Sqlsen)
            {
                SqlCommand command = BuildCommand(Sqlsen, CommandType.Text);
                SqlDataAdapter sqlDataAdapter = new SqlDataAdapter();
                DataSet ds = new DataSet();            command.Connection = sqlConn;
                sqlDataAdapter.SelectCommand = command;            sqlConn.Open();
                sqlDataAdapter.Fill(ds);
                sqlConn.Close();            command.Dispose();
                sqlDataAdapter.Dispose();            return ds;
            }
            #endregion
        }
        /// <summary>
        /// 用户登录
        /// </summary>
        public class Login
        {
            /// <summary>
            /// 用户登录
            /// </summary>
            /// <param name="username"></param>
            /// <param name="password"></param>
            /// <returns></returns>
            public int UserLogin(string username, string password)
            {
                DataAccess da = new DataAccess();
                SqlParameter[] param = {
                    new SqlParameter("@username",SqlDbType.NVarChar,20),
                    new SqlParameter("@userpwd",SqlDbType.NVarChar,20),
                };
                param[0].Value = username;
                param[1].Value = password;            return da.RunProcedureToValue("Login", param);
            }
        }    #region 用户数据  
        /// <summary>
        /// 用户数据
        /// </summary>
        public class UserData
        {
            DataAccess da = new DataAccess();
            /// <summary>
            /// 增加用户
            /// </summary>
            /// <param name="userName">姓名</param>
            /// <param name="userPass">密码</param>
            public void InsertUser(string userName, string userPass)
            {
                SqlParameter[] parameters = {
    new SqlParameter("@userName", SqlDbType.VarChar,20),
    new SqlParameter("@userPass", SqlDbType.VarChar,20)};
                parameters[0].Value = userName;
                parameters[1].Value = userPass;            da.RunProcedure("InsertUser", parameters);
            }
            /// <summary>
            /// 是否存在某用户
            /// </summary>
            /// <param name="userName">用户名</param>
            /// <returns></returns>
            public bool ExistsUser(string userName)
            {
                SqlParameter[] parameters = {
    new SqlParameter("@userName", SqlDbType.VarChar,20)
    };
                parameters[0].Value = userName;
                int result = da.RunProcedureToValue("UserExists", parameters);
                if (result == 1)
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }
            /// <summary>
            /// 修改密码
            /// </summary>
            /// <param name="userName">用户名</param>
            /// <param name="oldPass">旧密码</param>
            /// <param name="newPass">新密码</param>
            public void UpdatePass(string userName, string oldPass, string newPass)
            {
                SqlParameter[] parameters = {
    new SqlParameter("@userName", SqlDbType.VarChar,20),
                    new SqlParameter("@oldPass", SqlDbType.VarChar,20),
    new SqlParameter("@newPass", SqlDbType.VarChar,20)};
                parameters[0].Value = userName;
                parameters[1].Value = oldPass;
                parameters[2].Value = newPass;            da.RunProcedure("UpdateUserPass", parameters);
            }
            /// <summary>
            /// 获得用户的信息通过用户名称
            /// </summary>
            /// <param name="strNo"></param>
            /// <returns></returns>
            public DataTable GetUserInfoByName(string strName)
            {
                SqlParameter[] parameters = {
                    new SqlParameter("@Name",SqlDbType.VarChar,20)
                };
                parameters[0].Value = strName;
                return da.RunProcedureToDt("GetUserInfoByName", parameters);
            }
            /// <summary>
            /// 获得所有用户信息
            /// </summary>
            /// <returns></returns>
            public DataTable GetUserInfo()
            {
                return da.RunProcedureToDt("GetUserInfo");
            }
        }
        #endregion
    }
    四:相关存储过程
    ------------------------------------
    --用途:是否存在某用户
    --项目名称:
    --创建人
    --时间
    ------------------------------------
    CREATE PROCEDURE UserExists
    @userName varchar(20)
    AS
    DECLARE @TempID int
    SELECT @TempID = count(1) FROM Users WHERE [userName] = @userName
    IF @TempID = 0
    RETURN 0
    ELSE
    RETURN 1
    GO------------------------------------
    --用途:是否存在某用户
    --项目名称:
    --创建人:
    --时间:
    ------------------------------------
    CREATE proc GetUserInfo
    as
    SELECT     userId as 编号, userName as 用户名称
    FROM         Users
    GO其他的比如修改密码没什么问题,但就是在注册新用户的时候点一下-“注册失败”点第二次注册,就是在红色字体上报错,说“连接未关闭,连接的当前状态为已打开”,哪没关闭?
      

  2.   

      public SqlDataReader RunProcedureReader(string ProcedureName, IDataParameter[] parameters)
            {
                SqlDataReader returnReader;            sqlConn.Open();
                SqlCommand command = BuildQueryCommand(ProcedureName, parameters);
                command.CommandType = CommandType.StoredProcedure;            returnReader = command.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
                return returnReader;
            }红色部分是关闭数据库连接。