• C#自动给据sql中的带@的变量提取变量名称在从简单数据对象中取得生成SqlParameter数组进行数据插入(利用反射完成)


    C#自动给据sql中的带@的变量提取变量名称在从简单数据对象中取得生成SqlParameter数组进行数据插入


    //自动取得sql中的带@的变量,生成SqlParameter数组,从简单数据对象中取得sql中所需变量值

    public class ziDongGetSqlPara
    {
        #region   public static object[] getParArr(string strSql, object dataObj)
        /// <summary>
        /// 数据库操作sql 用SqlParameter数组取得
        /// </summary>
        /// <param name="strSql">sql语句</param>
        /// <param name="dataObj">sql查询用变量数据存放对象</param>
        /// <returns>SqlParameter数组</returns>
        public static object[] getParArr(string strSql, object dataObj)
        {

            object[] retObj = new object[1];
            //string strSql = "update Tablname set tb_password=@tb_password    where    tb_password=@oldtb_password    and    tb_username=@tb_username where    dd=@dd    and    @f_ff=dfffddd    and    @中文字段名称=T中文字段名称f and @resr=@etet222";
            Regex rg = new Regex("@[^,\t /=)(;-]*", RegexOptions.IgnoreCase);
            MatchCollection matCol = rg.Matches(strSql);
            SqlParameter[] sqlParArr = new SqlParameter[matCol.Count];
            int i = 0;
            foreach (Match mt in matCol)
            {
                sqlParArr[i++] = new SqlParameter(mt.Value, getFieldValue(mt.Value.ToString().TrimStart('@'), dataObj));
            }
            retObj[0] = sqlParArr;
            return retObj;
        }
        #endregion

        #region public static string getFieldValue(string strObjName, object dataObj) 取得指定对象中指定名称的变量或属性名称
        /// <summary>
        /// 取得指定对象中指定名称的变量或属性名称
        /// </summary>
        /// <param name="strObjName">变量或属性名称</param>
        /// <param name="dataObj">对象</param>
        /// <returns></returns>
        public static string getFieldValue(string strObjName, object dataObj)
        {
            string strRet = "";
            Type t = dataObj.GetType();
            if (t.FullName.ToString().Equals("System.Collections.Hashtable"))
            {
                strRet = Convert.ToString(((Hashtable)dataObj)[strObjName]);
            }
            else
            {
                PropertyInfo method_1 = t.GetProperty(strObjName);//方法的名称
                if (method_1 != null)
                {
                    strRet = Convert.ToString(method_1.GetGetMethod().Invoke(dataObj, null));//属性值取得
                }
                else
                {
                    FieldInfo fi = t.GetField(strObjName);//变量字段对象取得
                    if (fi != null)
                    {
                        strRet = Convert.ToString(fi.GetValue(dataObj));//变量值取得
                    }
                }
            }
            return strRet;
        }
        #endregion

        #region public static int dataInsert(string strSql, string dataBeanObj) 数据插入
        /// <summary>
        /// 数据插入
        /// </summary>
        /// <param name="strSql">插入sql</param>
        /// <param name="dataBeanObj">插入sql用变量存放对象</param>
        /// <returns></returns>
        public static int dataInsert(string strSql, object dataBeanObj)
        {
            int iret = 0;
            SqlParameter[] sqlParArr = getParArr(strSql, dataBeanObj)[0] as SqlParameter[];
            SqlHelper.ExecuteNonQuery(SqlHelper.ConnectionString, CommandType.Text, strSql, sqlParArr);
            return iret;
        }
        #endregion

    }

    //简单数据对象类

    public class logShow
    {
        // pkId, pcontent, createdate, errmesssge
        private string _pcontent;

        public string pcontent
        {
            get { return _pcontent; }
            set { _pcontent = value; }
        }
        private string _errmesssge;

        public string errmesssge
        {
            get { return _errmesssge; }
            set { _errmesssge = value; }
        }

    }

    //测试代码

            logShow logShowDataBean = new logShow();
            logShowDataBean.errmesssge = "http://www.my400800.cn";
            logShowDataBean.pcontent = "http://www.my400800.cn 是一个不错的网站。";
            ziDongGetSqlPara.dataInsert("insert into tb_log(pcontent,errmesssge)values(@pcontent,@errmesssge)", logShowDataBean);

    //需要添加的引用

    using System;
    using System.Data;
    using System.Configuration;
    using System.Collections;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;
    using System.Reflection;
    using System.Data.SqlClient;
    using System.Text;
    using System.Text.RegularExpressions;
    using fjt.DBUtility;

    //根据简单数据对象取得Sql用变量的值

            ziDongGetSqlPara.getFieldValue("strPri1", t1);
            ziDongGetSqlPara.getFieldValue("strPri2", t1);
            ziDongGetSqlPara.getFieldValue("StrGetSetTest", t1);

  • 相关阅读:
    漏洞都是怎么编号的CVE/CAN/BUGTRAQ/CNCVE/CNVD/CNNVD
    数据集成之主数据管理(一)基础概念篇
    hdu 4940 Destroy Transportation system(水过)
    关于C++ const 的全面总结
    UserManageSys
    malloc函数具体解释
    Haskell 差点儿无痛苦上手指南
    机房收费系统——附加数据库
    面向对象程序设计与面向过程程序设计解析
    java的System.getProperty()方法能够获取的值
  • 原文地址:https://www.cnblogs.com/jishu/p/1940094.html
Copyright © 2020-2023  润新知