用C#模拟 Java Bean (三)—— Control

啊,百度了下 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 并且具有 空参的构造函数

发布了23 篇原创文章 · 获赞 1 · 访问量 5万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章