功能很简单,写过了今天来注册的时候有点问题,请各位帮指点指点呀
一:点击进入注册界面 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;
}
一:点击进入注册界面 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;
}
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其他的比如修改密码没什么问题,但就是在注册新用户的时候点一下-“注册失败”点第二次注册,就是在红色字体上报错,说“连接未关闭,连接的当前状态为已打开”,哪没关闭?
{
SqlDataReader returnReader; sqlConn.Open();
SqlCommand command = BuildQueryCommand(ProcedureName, parameters);
command.CommandType = CommandType.StoredProcedure; returnReader = command.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
return returnReader;
}红色部分是关闭数据库连接。