小弟一直做ASP,现在改做ASP.NET,已经两个多月了,东西是做出来了,可是总感觉做的东西还是摆脱不了面向过程的思想,其实明白ASP.NET强大是强大在了C#这种面向对象语言的使用上,可是自已建立类时,总有很多疑惑,不知写的是否是类?还有那些get、set之类的类,听说叫什么数据模型,与表结构对应,可如何对这个类进行操作?还有请高手们帮我看看,我这样进行类的编写有什么缺点?我问过一个朋友,他说我的数据库连接后没有关闭,所以这样会使系统瘫痪,可是我运行了呀,并没有出现什么不正常的反应。我写的类如下:请高手指教!using System;
using System.Data.SqlClient;
using System.Configuration;namespace webInfoAdmin.Components
{
/// <summary>
/// 后台用户管理类
/// </summary>
public class AdminUser
{
/*
private int m_adminID;
private string m_adminName;
private string m_adminPwd;
private string m_adminRole;
*/
private string connStr;
private SqlConnection conn;
/*
public int adminID
{
get { return m_adminID; }
}
public string adminName
{
get { return m_adminName; }
set { m_adminName = value; }
}
public string adminPwd
{
get { return m_adminPwd; }
set { m_adminPwd = value; }
}
private string adminRole
{
get { return m_adminRole; }
set { m_adminRole = value; }
}
*/
public AdminUser()
{
//
// TODO: 在此处添加构造函数逻辑
//
connStr = ConfigurationSettings.AppSettings["connK12SQLStr"];
conn = new SqlConnection(connStr);
}
/// <summary>
/// 判断是否成功登录
/// </summary>
/// <param name="adminID"></param>
/// <param name="adminName"></param>
/// <param name="adminPwd"></param>
/// <returns></returns>
public bool AdminLogon(out int adminID, string adminName, string adminPwd)
{
conn.Close();
conn.Open();
string sqlStr = "SELECT adminID FROM Admin_Web WHERE adminName = '"+adminName+"' and adminPwd = '"+adminPwd+"'";
SqlCommand comm = new SqlCommand(sqlStr, conn);
SqlDataReader dr = comm.ExecuteReader();
if(dr.Read())
{
adminID = dr.GetInt32(0);
return true;
}
else
{
adminID = 0;
return false;
}
}
/// <summary>
/// 判断是否存在同样的用户名
/// </summary>
/// <returns></returns>
public bool hasSameUser(string adminName)
{
conn.Close();
conn.Open();
string sqlStr = "SELECT COUNT(*) FROM Admin_Web WHERE adminName = '"+adminName+"'";
SqlCommand comm = new SqlCommand(sqlStr, conn);
int recCount = Convert.ToInt32(comm.ExecuteScalar());
if(recCount == 0)
{
return false;
}
else
{
return true;
}
}
/// <summary>
/// 添加后台用户
/// </summary>
/// <param name="adminName"></param>
/// <param name="adminPwd"></param>
/// <param name="adminRole"></param>
public void addUser(string adminName, string adminPwd, string adminRole)
{
conn.Close();
conn.Open();
string sqlStr = "INSERT INTO Admin_Web(adminName, adminPwd, adminRole) VALUES('"+adminName+"', '"+adminPwd+"', '"+adminRole+"')";
SqlCommand comm = new SqlCommand(sqlStr, conn);
comm.ExecuteNonQuery();
}
/// <summary>
/// 修改用户信息(包括修改用户名、密码和用户对应角色)
/// </summary>
/// <param name="adminID"></param>
/// <param name="adminRole"></param>
public void updateUserRole(int adminID, string adminName, string adminPwd, string adminRole)
{
//可先通过hasSameUser方法检查是否存在相同的用户。
conn.Close();
conn.Open();
string sqlStr = "UPDATE Admin_Web SET adminName = '"+adminName+"', adminPwd = '"+adminPwd+"', adminRole = '"+adminRole+"'";
SqlCommand comm = new SqlCommand(sqlStr, conn);
comm.ExecuteNonQuery();
}
/// <summary>
/// 得到用户的权限列表
/// </summary>
/// <param name="adminID"></param>
/// <returns></returns>
public int[] getUserRankIDs(int adminID)
{
conn.Close();
conn.Open();
string sqlStr = "SELECT COUNT(*) FROM Web_AdminRank WHERE adminID = "+adminID+"";
SqlCommand comm = new SqlCommand();
int recCount = Convert.ToInt32(comm.ExecuteScalar()); int[] rankID = new int[recCount];
string sqlStr1 = "SELECT rankID FROM Web_AdminRank WHERE adminID = "+adminID+"";
comm = new SqlCommand();
SqlDataReader dr = comm.ExecuteReader();
int i = 0;
while(dr.Read())
{
rankID[i] = dr.GetInt32(0);
i++;
}
return rankID;
}
/// <summary>
/// 修改用户权限列表
/// </summary>
/// <param name="adminID"></param>
/// <param name="rankID"></param>
public void updateUserRankIDs(int adminID, int[] rankID)
{
//先删除原来的权限列表
conn.Close();
conn.Open();
string sqlStr = "DELETE FROM Web_AdminRank WHERE adminID = "+adminID+"";
SqlCommand comm = new SqlCommand(sqlStr, conn);
comm.ExecuteNonQuery(); //修改为新的权限列表rankID[]
string sqlStr1 = "";
for(int i=0; i<rankID.Length; i++)
{
sqlStr1 = "INSERT INTO Web_AdminRank(adminID, rankID) VALUES("+adminID+", "+rankID[i]+")";
comm = new SqlCommand(sqlStr1, conn);
comm.ExecuteNonQuery();
} } }
}

解决方案 »

  1.   

    conn.Close();
    conn.Open();
    反了吧。数据库一般都是使用完了马上关闭,释放资源的啊。
      

  2.   

    查查相关SDK/MSDN,搜索“类”就很多相关文章了。最好是买本C#的书看看,他着重讲的都是面向对象。。
      

  3.   

    在用DELPHI时,项目经理曾和我说过conn.close();conn.open();的好处。所以在用ASP.NET时,我也这样用了。对了,我这样写不好,那如何写才是正确的?还有,那些get、set如何使用呢?