用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萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章