啊,百度了下 Pojo Java Bean 的含义,感觉怪奇怪的。
考虑话换个名字:用C#模拟实现 数据库实体 SqlPojo,但之前已经发了,就懒得改了,大概这意思就行。
然后昨晚在msdn上查了一下 泛型,哎哟我擦,以前以为是 var 泛化类型,觉得是 php 那样的弱化类型,结果发现原来是C++的Template模板。
好吧,根据这个修改了一下 DBHelper 的 Single 方法。
然后,我还没事查了一下 MVC,没了解清楚,简单的实验了下,做了 模型控制类 Control:
示例:UserControl
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Collections;
using System.Data;
//namespace User
//{
/// <summary>
/// UserControl 的摘要说明
/// </summary>
public class UserControl
{
public UserControl()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
private const string LoginTemplate = "Select * From [_Login] Where [UserName] = '{0}' AND [PassWord] = '{1}'";
private const string GetUserTemplate = "Select * From [_Login] Where [AuthStr] = '{0}'";
public static void CheckLogin(_Login user)
{
if (user == null || user.Uid == 0L)
{
throw new ActionFaildException(Constants.AR_Code_LoginError, "请先登录.");
}
}
public static _Login Login(Hashtable param)
{
Constants.ParamCheck(new string[] { "UserName", "PassWord" }, param);
_Login login = new _Login();
string userName = param["UserName"].ToString();
string passWord = param["PassWord"].ToString();
string sql = string.Format(UserControl.LoginTemplate, userName, passWord);
login = (_Login)DBHelper.ExecuteQuery(sql, login);
if (login == null)
{
throw new ActionFaildException(Constants.AR_Code_WrongPassword, "账号或密码错误.");
}
else
{
return login;
}
}
public static int UpdateUserInfo(_Login user, Hashtable param)
{
UserControl.CheckLogin(user);
UserInfo info = new UserInfo();
info.LoadFromHashtable(param);
info.Uid = user.Uid;
return DBHelper.Update(info);
}
public static UserInfo Regist(Hashtable param)
{
Constants.ParamCheck(new string[] { "UserName", "PassWord" }, param);
// 插入 _Login 记录
_Login login = new _Login();
login.LoadFromHashtable(param);
login.GroupCode = 1;
login.AuthStr = Guid.NewGuid().ToString();
DBHelper.Insert(login);
login = UserControl.Login(param);
// 插入 UserInfo 记录
UserInfo info = new UserInfo();
info.LoadFromHashtable(param);
info.Uid = login.Uid;
DBHelper.Insert(info);
V_UserInfo v = new V_UserInfo();
v.Uid = info.Uid;
return (V_UserInfo)DBHelper.Single(v);
}
/// <summary>
/// 根据身份串获取用户
/// 身份串为空 或 未知的身份串 则返回 null
/// </summary>
/// <param name="authStr">用户身份串</param>
/// <returns></returns>
public static _Login GetUser(string authStr)
{
if (Constants.IsNull(authStr))
{
return null;
}
string sql = string.Format(UserControl.GetUserTemplate, authStr);
_Login login = new _Login();
return (_Login)DBHelper.ExecuteQuery(sql, login);
}
public static int ChangePassWord(_Login user, Hashtable param)
{
string passWord = Constants.GetParam(param, "PassWord");
string newPassWord = Constants.GetParam(param, "NewPassWord");
if (passWord.Equals(user.PassWord))
{
user.PassWord = newPassWord;
return DBHelper.Update(user);
}
else
{
throw new ActionFaildException(Constants.AR_Code_WrongPassword, "密码错误.");
}
}
public static V_UserInfo GetMyInfo(_Login user)
{
UserControl.CheckLogin(user);
return UserControl.GetUserInfo(user.Uid);
}
private static V_UserInfo GetUserInfo(long uid)
{
V_UserInfo v = new V_UserInfo();
v.Uid = uid;
return (V_UserInfo)DBHelper.Single(v);
}
}
//}
哦,这还是旧版的。
贴一个新版的 DBHelper.Single 方法:
public static T Single<T>(string sql) where T : SqlPojo, new()
{
T t = new T();
DataRow dr = DBHelper.ExecuteQuery(sql);
t.LoadFromDataRow(dr);
return t;
}
where T : SqlPojo, new()
限定符,表示 T类型 派生自 SqlPojo 并且具有 空参的构造函数