判断记录是否存在的通用方法

在数据写入到数据库时,通常要根据某些条件检测记录是否存在,然后决定是否要写入,数据写入分两种情形:新添加数据和更新数据,在通用权限底层中,对这类判断进行了封装。

位置截图

主要核心代码部分

        /// <summary>        /// 判断存在        /// </summary>        /// <param name="parameters"></param>        /// <param name="id"></param>        /// <returns></returns>        public virtual bool Exists(List<KeyValuePair<string, object>> parameters, object id = null)        {            bool result = false;            if (id != null)            {                result = DbLogic.Exists(DbHelper, this.CurrentTableName, parameters, new KeyValuePair<string, object>(this.PrimaryKey, id));            }            else            {                result = DbLogic.Exists(DbHelper, this.CurrentTableName, parameters);            }            return result;        }

        /// <summary>        /// 记录是否存在        /// </summary>        /// <param name="dbHelper">数据库连接</param>        /// <param name="tableName">目标表名</param>        /// <param name="parameters">参数</param>        /// <param name="targetField">获取字段</param>        /// <param name="name">目标字段名</param>        /// <param name="parameters">目标字段值</param>        /// <returns>存在</returns>        public static bool Exists(IDbHelper dbHelper, string tableName, List<KeyValuePair<string, object>> parameters, KeyValuePair<string, object> parameter = new KeyValuePair<string, object>())        {            return GetCount(dbHelper, tableName, parameters, parameter) > 0;        }        /// <summary>        /// 获取个数        /// </summary>        /// <param name="dbHelper">数据库连接</param>        /// <param name="tableName">目标表名</param>        /// <param name="parameters">目标字段,值</param>        /// <returns>行数</returns>        public static int GetCount(IDbHelper dbHelper, string tableName, List<KeyValuePair<string, object>> parameters, KeyValuePair<string, object> parameter = new KeyValuePair<string, object>())        {            int result = 0;            string sqlQuery = "SELECT COUNT(1) "                + " FROM " + tableName                + " WHERE " + GetWhereString(dbHelper, parameters, BaseBusinessLogic.SQLLogicConditional);

            if (!string.IsNullOrEmpty(parameter.Key))            {                if (parameter.Value != null)                {                    sqlQuery += BaseBusinessLogic.SQLLogicConditional + "( " + parameter.Key + " <> ‘" + parameter.Value + "‘ ) ";                }                else                {                    sqlQuery += BaseBusinessLogic.SQLLogicConditional + "( " + parameter.Key + " IS NOT NULL) ";                }            }

            object returnObject = null;            if (parameters != null)            {                returnObject = dbHelper.ExecuteScalar(sqlQuery, dbHelper.MakeParameters(parameters));            }            else            {                returnObject = dbHelper.ExecuteScalar(sqlQuery);            }            if (returnObject != null)            {                result = int.Parse(returnObject.ToString());            }            return result;        }

该方法支持多种数据库(Oracle、MySQL、MSSQL等),id为记录的主键,新增时是null。可以参照引入到自己项目中。

方法应用举例

如在新增公司时,要求公司编号和公司名称不可以重复,前端文本框值变化时使用了Ajax异步判断。

        /// <summary>
        /// 验证公司编号是否重复
        /// </summary>
        /// <param name="code"></param>
        /// <param name="id"></param>
        /// <returns></returns>
        private bool ValidateCode(string code, string id)
        {
            code = DbLogic.SqlSafe(code);
            id = DbLogic.SqlSafe(id);
            return !organizeManager.Exists(new KeyValuePair<string, object>(BaseOrganizeEntity.FieldCode, code), id);
        }
        /// <summary>
        /// 验证公司名称是否重复
        /// </summary>
        /// <param name="name"></param>
        /// <param name="id"></param>
        /// <returns></returns>
        private bool ValidateName(string name, string id)
        {
            name = DbLogic.SqlSafe(name);
            id = DbLogic.SqlSafe(id);
            return !organizeManager.Exists(new KeyValuePair<string, object>(BaseOrganizeEntity.FieldFullName, name), id);
        }

在新增公司时,Id为null,更新时传入公司的主键Id。

有了这个方法,表中记录存在判断处理就方便多了,而且支持增加多种条件的限制判断(参数List<KeyValuePair<string, object>> parameters)。

时间: 2024-10-12 19:56:27

判断记录是否存在的通用方法的相关文章

mysql中判断记录是否存在方法比较【转】

把数据写入到数据库的时,常常会碰到先要检测要插入的记录是否存在,然后决定是否要写入. 我这里总结了判断记录是否存在的常用方法: sql语句:select count(*) from tablename; 然后读取count(*)的值判断记录是否存在.对于这种方法性能上有些浪费,我们只是想判断记录记录是否存在,没有必要全部都查出来. 以下这个方法是我推荐的. sql语句:select 1 from tablename where col = col limit 1; 然后读取语句执行所影响的行数.

mysql中判断记录是否存在方法比较

我这里总结了判断记录是否存在的常用方法: sql语句:select count(*) from tablename; 然后读取count(*)的值判断记录是否存在.对于这种方法性能上有些浪费,我们只是想判断记录记录是否存在,没有必要全部都查出来. 以下这个方法是我推荐的. sql语句:select 1 from tablename where col = col limit 1; 然后读取语句执行所影响的行数. 当然这里limit 1很重要.这要mysql找到一条记录后就不会在往下找了.这里执行

js获取或判断任意数据类类型的通用方法(getDataType)和将NodeList转为数组(NodeListToArray)

function getDataType(any){ /* (1) Object.prototype.toString.call 方法判断类型: 优点:通用,返回"[object String]" 具体object的类型 缺点:不能返回继承的类型 (2)typeof x 缺点:对object类型不能细分: 优点:对空null的判断 'undefined'的应用; 返回类型有:'undefined' "string" 'number' 'boolean' 'funct

Collection接口 Collection的通用方法 foreach Iterator 迭代器

Collection接口 单列集合的接口list 有索引 有序set 无索引 无序AbstractCollection是实现了Collection接口的抽象父类Collection<> c = new ArrayList<>();多态 只可以用父类的方法,不可以用子类特有的方法 Collection的通用方法增 add()删 remove()清空集合 clear()判断元素是否为空 isEmpty判断元素是否存在 contains()集合的长度 size() 增强for forea

Java连接MySQL数据库增删改查通用方法

Java连接MySQL数据库增删改查通用方法 运行环境:eclipse+MySQL 以前我们Java连接MySQL数据库都是一个数据库写一个类,类下面写好多方法,要是多个数据库,就要写多个类多个方法,导致代码编写太过于繁琐,所以为了改变这样的繁琐,我将连接数据库的方法进行了一系列的封装,使用户传入一个对象值Object就可以得到想要的. 我在之前写过一篇普通的Java连接MySQL数据库,大家可以看看,以便对比参考之后就知道差距了  数据库--MySQL-->Java篇 接下来我给大家讲讲如何将

dgv 到实体类 导出excel 的一些通用方法

篇把项目中用到的一些通用方法总结出来, 这些方法因为经常需要在项目中用到,所以把它们归纳在一起, 形成一个.dll 文件是一个理想的选择. 这样也便于日后缩短开发周期. 一. 把一个DataGridView对象转换成一个DataTable对象 public static DataTable GetDgvToTable(DataGridView dgv)   {           if(dgv==null) throw new NullReferenceException();         

java把class类写入excel和读取出来的通用方法

这个例子中用了反射,泛型实现了通用的excel读写方法. 我们常常遇到要把一个类class写入excel的时候,有时候class的字段非常多,我们不可能一个个的去get写入excel.这里写了一个通用方法.只要传入数据的list和类型,就能很方便的把数据写入excel,也能很方便的读取出来. 例子下载: java通过class读写excel的例子 首先要引用这两个包 jxl.jar poi-3.9-20121203.jar 相关代码如下: BeanRefUtil 反射代码---自动get类cla

[转]CSS完美兼容IE6/IE7/IE8/IE9/IE10的通用方法

CSS完美兼容IE6/IE7/IE8/IE9/IE10的通用方法 2013-12-12  By 奥夫 关于CSS对各个浏览器兼容已经是老生常谈的问题了, 网络上的教程遍地都是.以下内容没有太多新颖, 纯属个人总结, 希望能对初学者有一定的帮助. 一.CSS HACK 以下两种方法几乎能解决现今所有HACK. 1, !important 随着IE7对!important的支持, !important 方法现在只针对… 一.CSS HACK 以下两种方法几乎能解决现今所有HACK. 1, !impo

Mysql判断记录是否存在

最近在开发一个电商平台的时候,经常会遇到要判断表中是否存在某条记录,不存在,则插入. 判断记录是否存在的sql,不同的写法,也会有不同的性能. select count(*) from tablename where col = 'col'; 这种方法性能上有些浪费,没必要把全部记录查出来. select 1 from tablename where col = 'col' limit 1; 执行这条sql语句,所影响的行数不是0就是1. 特别解释下limit 1,mysql在找到一条记录后就不