http://www.sufeinet.com/plugin.php?id=keke_group

苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

分布式系统框架(V2.0) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper爬虫框架(V2.7-含.netcore) HttpHelper官方出品,爬虫框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 开源的爬虫类,支持多种模式和属性 源码 - 代码生成器 - 讨论区 - 教程- 例子

楼主: 站长苏飞

[数据库] 最新的C#SqlHelper 类苏飞修改版

  [复制链接]
发表于 2013-4-23 12:51:27 | 显示全部楼层
简单举个例子,最好不要在静态方法里面提供数据库的事务操作,因为事务操作会引发锁,这种锁的影响随着数据库和应用程序往返次数的增加会成倍增加,若真的需要事务操作,可以在存储过程内部实现,这样由于没有数据往返,锁的负面影响大幅降低了。


1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
发表于 2013-4-23 12:54:09 | 显示全部楼层
关于命名,各人看法不同,但是最好是根据语义来命名,而不是内部调用的特征。
我简单写了几个方法,里面有重载,也有扩展:


        /// <summary>
        /// 简单查询数据库
        /// </summary>
        /// <param name="sqlString">sql查询字符串</param>
        /// <returns>返回数据集</returns>
        public static DataSet Select(string sqlString)
        {
            using (SqlConnection cn = new SqlConnection(ConnectionString))
            {
                SqlDataAdapter da = new SqlDataAdapter(sqlString, cn);
                DataSet ds = new DataSet();
                da.Fill(ds);
                return ds;
            }
        }

        /// <summary>
        /// 参数化查询数据库
        /// </summary>
        /// <param name="sqlString">sql查询字符串</param>
        /// <param name="sqlParams">sql查询参数数组</param>
        /// <returns>返回数据集</returns>
        public static DataSet Select(string sqlString, SqlParameter[] sqlParams)
        {
            using (SqlConnection cn = new SqlConnection(ConnectionString))
            {
                if (cn.State != ConnectionState.Open) { cn.Open(); }
                SqlDataAdapter da = new SqlDataAdapter();
                SqlCommand cmd = new SqlCommand(sqlString, cn);
                foreach(SqlParameter m in sqlParams)
                {
                    cmd.Parameters.Add(m);
                }
                DataSet ds = new DataSet();
                da.SelectCommand = cmd;
                da.Fill(ds);
                if (cn.State != ConnectionState.Closed) { cn.Close(); }
                return ds;
            }
        }

        /// <summary>
        /// 存储过程查询数据库
        /// </summary>
        /// <param name="storeProcedure">存储过程名称</param>
        /// <param name="sqlParams">存储过程参数数组(可选)</param>
        /// <returns>返回数据集</returns>
        public static DataSet SelectX(string storeProcedure, params SqlParameter[] sqlParams)
        {
            using (SqlConnection cn = new SqlConnection(ConnectionString))
            {
                if (cn.State != ConnectionState.Open) { cn.Open(); }
                SqlDataAdapter da = new SqlDataAdapter();
                SqlCommand cmd = new SqlCommand(storeProcedure, cn);
                cmd.CommandType = CommandType.StoredProcedure;
                if (sqlParams != null)
                {
                    foreach (SqlParameter m in sqlParams)
                    {
                        cmd.Parameters.Add(m);
                    }
                }
                DataSet ds = new DataSet();
                da.SelectCommand = cmd;
                da.Fill(ds);
                if (cn.State != ConnectionState.Closed) { cn.Close(); }
                return ds;
            }
        }
发表于 2013-4-23 12:55:42 | 显示全部楼层
        /// <summary>
        /// 简单操作数据库
        /// </summary>
        /// <param name="sqlString">sql操作语句</param>
        /// <returns>返回影响条数</returns>
        public static int Execute(string sqlString)
        {
            using (SqlConnection cn = new SqlConnection(ConnectionString))
            {
                if (cn.State != ConnectionState.Open) { cn.Open(); }
                SqlCommand cmd = new SqlCommand(sqlString, cn);
                int re = cmd.ExecuteNonQuery();
                if (cn.State != ConnectionState.Closed) { cn.Close(); }
                return re;
            }
        }

        /// <summary>
        /// 参数化操作数据库
        /// </summary>
        /// <param name="sqlString">sql操作语句</param>
        /// <param name="sqlParams">sql操作参数数组</param>
        /// <returns>返回影响条数</returns>
        public static int Execute(string sqlString, SqlParameter[] sqlParams)
        {
            using (SqlConnection cn = new SqlConnection(ConnectionString))
            {
                if (cn.State != ConnectionState.Open) { cn.Open(); }
                SqlCommand cmd = new SqlCommand(sqlString, cn);
                foreach (SqlParameter m in sqlParams)
                {
                    cmd.Parameters.Add(m);
                }
                int re = cmd.ExecuteNonQuery();
                if (cn.State != ConnectionState.Closed) { cn.Close(); }
                return re;
            }
        }

        /// <summary>
        /// 存储过程操作数据库
        /// </summary>
        /// <param name="storeProcedure">存储过程名称</param>
        /// <param name="sqlParams">存储过程的参数数组</param>
        /// <returns>返回影响条数</returns>
        public static int ExecuteX(string storeProcedure, params SqlParameter[] sqlParams)
        {
            using (SqlConnection cn = new SqlConnection(ConnectionString))
            {
                if (cn.State != ConnectionState.Open) { cn.Open(); }
                SqlCommand cmd = new SqlCommand(storeProcedure, cn);
                cmd.CommandType = CommandType.StoredProcedure;
                if (sqlParams!=null)
                {
                    foreach (SqlParameter m in sqlParams)
                    {
                        cmd.Parameters.Add(m);
                    }
                }
                int re = cmd.ExecuteNonQuery();
                if (cn.State != ConnectionState.Closed) { cn.Close(); }
                return re;
            }
        }
发表于 2013-4-23 12:58:21 | 显示全部楼层
你的代码里面好多方法命名非常奇怪,比如这个:

public static int ExecteNonQueryProducts(string cmdText, params SqlParameter[] commandParameters)
发表于 2013-4-23 13:00:41 | 显示全部楼层
是不是英文拼错了?也不像

execte是什么? products又是什么?

这样的方法命名,语义不清楚难以理解,又怎么可能保证被正确调用呢?
发表于 2013-4-23 13:08:51 | 显示全部楼层
另外只有当这个方法可能会被高频率使用,才有必要进行重载。

根据7数定律,当项数超过7,人脑的接受力就开始下滑

一个类的方法尽量控制在7个以内,超过7个就要谨慎处理,如非必要,绝对不要把边缘化的功能也拉进来
 楼主| 发表于 2013-4-23 13:51:13 | 显示全部楼层
apollosun123 发表于 2013-4-23 13:00
是不是英文拼错了?也不像

execte是什么? products又是什么?

很感谢你的建议,我以后会注重下这方面。
发表于 2013-4-23 14:22:07 | 显示全部楼层
站长苏飞 发表于 2013-4-23 13:51
很感谢你的建议,我以后会注重下这方面。

还是要感谢你无私开源,给大家提供很大的帮助
 楼主| 发表于 2013-4-23 14:26:47 | 显示全部楼层
apollosun123 发表于 2013-4-23 14:22
还是要感谢你无私开源,给大家提供很大的帮助

呵呵,我感觉你的好想工作了很久了,如果对本站或者我个人有什么建议欢迎到相应版块发贴提出,我一定认真改正
发表于 2013-4-23 16:04:24 | 显示全部楼层
站长苏飞 发表于 2013-4-23 14:26
呵呵,我感觉你的好想工作了很久了,如果对本站或者我个人有什么建议欢迎到相应版块发贴提出,我一定认真 ...

我在这行混的很久但也不是很深,其实也就是个人爱好,之前有用asp写过一个“先锋海盗类”,跟你那个远程采集的概念差不多,但是简陋了,以后多交流,有项目也可以一起做。
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备18043678号-2)

GMT+8, 2024-3-29 23:04

© 2014-2021

快速回复 返回顶部 返回列表