昨天发了一个贴。。引来大家发粪。。。那大家公布一下你们自己的DbHelperSQL。,发来,大家一起起学习习,改进一下。。。

CSMSDN 2014-01-06 04:48:57
http://bbs.csdn.net/topics/390685831?page=1#post-396529087


如题,大家发一下,你自己的DbHelperSQL。,借鉴学习一下。。

谢谢。。。
...全文
500 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
Im_Sorry 2014-01-08
  • 打赏
  • 举报
回复
引用 24 楼 linustd 的回复:
[quote=引用 23 楼 hou306010849 的回复:] [quote=引用 22 楼 linustd 的回复:] [quote=引用 21 楼 hou306010849 的回复:] [quote=引用 20 楼 linustd 的回复:] 其实, 微软从来就没资格说"企业级"三个字. 真正的企业级, 银行, 电力, 能源等关键产业, 全被IBM, ORACLE等企业霸占. 互联网领域, 除了微软自家仅仅用来展示文字为主要功能的MSDN, MICROSFT.COM之外, 几乎没有一家大的互联网公司用微软平台的. 生下的也就是那些"不正规"的小公司的. 所以说, 搞.net的同学, 不要抱怨.net环境差待遇差, 人家微软就是专门干这个方向的, 是你自己没看清楚而已. 难道一个掏厕所的, 也有资格抱怨厕所太臭吗?
滚蛋好么?你在让爹看到你,我就真成你亲爹了!记住这句话!别在让我看到你的帖子了,看到后不管你记不记得,我都是你亲爹![/quote] 孙子, 爷爷又来了, 你是不是要急死了? 来来来, 尝尝爷爷刚拉的新鲜热屎[/quote] 不解释!你已经默认了!我不多说什么!你别骂你亲爹了![/quote] 就你这样的低水平无知小儿, 也敢也爷爷叫板, 你算个什么东西.[/quote] 继续骂你亲爹!
普世编程技术 2014-01-08
  • 打赏
  • 举报
回复
引用 23 楼 hou306010849 的回复:
[quote=引用 22 楼 linustd 的回复:] [quote=引用 21 楼 hou306010849 的回复:] [quote=引用 20 楼 linustd 的回复:] 其实, 微软从来就没资格说"企业级"三个字. 真正的企业级, 银行, 电力, 能源等关键产业, 全被IBM, ORACLE等企业霸占. 互联网领域, 除了微软自家仅仅用来展示文字为主要功能的MSDN, MICROSFT.COM之外, 几乎没有一家大的互联网公司用微软平台的. 生下的也就是那些"不正规"的小公司的. 所以说, 搞.net的同学, 不要抱怨.net环境差待遇差, 人家微软就是专门干这个方向的, 是你自己没看清楚而已. 难道一个掏厕所的, 也有资格抱怨厕所太臭吗?
滚蛋好么?你在让爹看到你,我就真成你亲爹了!记住这句话!别在让我看到你的帖子了,看到后不管你记不记得,我都是你亲爹![/quote] 孙子, 爷爷又来了, 你是不是要急死了? 来来来, 尝尝爷爷刚拉的新鲜热屎[/quote] 不解释!你已经默认了!我不多说什么!你别骂你亲爹了![/quote] 就你这样的低水平无知小儿, 也敢也爷爷叫板, 你算个什么东西.
Im_Sorry 2014-01-08
  • 打赏
  • 举报
回复
引用 22 楼 linustd 的回复:
[quote=引用 21 楼 hou306010849 的回复:] [quote=引用 20 楼 linustd 的回复:] 其实, 微软从来就没资格说"企业级"三个字. 真正的企业级, 银行, 电力, 能源等关键产业, 全被IBM, ORACLE等企业霸占. 互联网领域, 除了微软自家仅仅用来展示文字为主要功能的MSDN, MICROSFT.COM之外, 几乎没有一家大的互联网公司用微软平台的. 生下的也就是那些"不正规"的小公司的. 所以说, 搞.net的同学, 不要抱怨.net环境差待遇差, 人家微软就是专门干这个方向的, 是你自己没看清楚而已. 难道一个掏厕所的, 也有资格抱怨厕所太臭吗?
滚蛋好么?你在让爹看到你,我就真成你亲爹了!记住这句话!别在让我看到你的帖子了,看到后不管你记不记得,我都是你亲爹![/quote] 孙子, 爷爷又来了, 你是不是要急死了? 来来来, 尝尝爷爷刚拉的新鲜热屎[/quote] 不解释!你已经默认了!我不多说什么!你别骂你亲爹了!
普世编程技术 2014-01-08
  • 打赏
  • 举报
回复
引用 21 楼 hou306010849 的回复:
[quote=引用 20 楼 linustd 的回复:] 其实, 微软从来就没资格说"企业级"三个字. 真正的企业级, 银行, 电力, 能源等关键产业, 全被IBM, ORACLE等企业霸占. 互联网领域, 除了微软自家仅仅用来展示文字为主要功能的MSDN, MICROSFT.COM之外, 几乎没有一家大的互联网公司用微软平台的. 生下的也就是那些"不正规"的小公司的. 所以说, 搞.net的同学, 不要抱怨.net环境差待遇差, 人家微软就是专门干这个方向的, 是你自己没看清楚而已. 难道一个掏厕所的, 也有资格抱怨厕所太臭吗?
滚蛋好么?你在让爹看到你,我就真成你亲爹了!记住这句话!别在让我看到你的帖子了,看到后不管你记不记得,我都是你亲爹![/quote] 孙子, 爷爷又来了, 你是不是要急死了? 来来来, 尝尝爷爷刚拉的新鲜热屎
Im_Sorry 2014-01-08
  • 打赏
  • 举报
回复
引用 20 楼 linustd 的回复:
其实, 微软从来就没资格说"企业级"三个字. 真正的企业级, 银行, 电力, 能源等关键产业, 全被IBM, ORACLE等企业霸占. 互联网领域, 除了微软自家仅仅用来展示文字为主要功能的MSDN, MICROSFT.COM之外, 几乎没有一家大的互联网公司用微软平台的. 生下的也就是那些"不正规"的小公司的. 所以说, 搞.net的同学, 不要抱怨.net环境差待遇差, 人家微软就是专门干这个方向的, 是你自己没看清楚而已. 难道一个掏厕所的, 也有资格抱怨厕所太臭吗?
滚蛋好么?你在让爹看到你,我就真成你亲爹了!记住这句话!别在让我看到你的帖子了,看到后不管你记不记得,我都是你亲爹!
普世编程技术 2014-01-08
  • 打赏
  • 举报
回复
其实, 微软从来就没资格说"企业级"三个字. 真正的企业级, 银行, 电力, 能源等关键产业, 全被IBM, ORACLE等企业霸占. 互联网领域, 除了微软自家仅仅用来展示文字为主要功能的MSDN, MICROSFT.COM之外, 几乎没有一家大的互联网公司用微软平台的. 生下的也就是那些"不正规"的小公司的. 所以说, 搞.net的同学, 不要抱怨.net环境差待遇差, 人家微软就是专门干这个方向的, 是你自己没看清楚而已. 难道一个掏厕所的, 也有资格抱怨厕所太臭吗?
CSMSDN 2014-01-08
  • 打赏
  • 举报
回复
CSMSDN 2014-01-08
  • 打赏
  • 举报
回复
引用 25 楼 hou306010849 的回复:
[quote=引用 24 楼 linustd 的回复:] [quote=引用 23 楼 hou306010849 的回复:] [quote=引用 22 楼 linustd 的回复:] [quote=引用 21 楼 hou306010849 的回复:] [quote=引用 20 楼 linustd 的回复:] 其实, 微软从来就没资格说"企业级"三个字. 真正的企业级, 银行, 电力, 能源等关键产业, 全被IBM, ORACLE等企业霸占. 互联网领域, 除了微软自家仅仅用来展示文字为主要功能的MSDN, MICROSFT.COM之外, 几乎没有一家大的互联网公司用微软平台的. 生下的也就是那些"不正规"的小公司的. 所以说, 搞.net的同学, 不要抱怨.net环境差待遇差, 人家微软就是专门干这个方向的, 是你自己没看清楚而已. 难道一个掏厕所的, 也有资格抱怨厕所太臭吗?
滚蛋好么?你在让爹看到你,我就真成你亲爹了!记住这句话!别在让我看到你的帖子了,看到后不管你记不记得,我都是你亲爹![/quote] 孙子, 爷爷又来了, 你是不是要急死了? 来来来, 尝尝爷爷刚拉的新鲜热屎[/quote] 不解释!你已经默认了!我不多说什么!你别骂你亲爹了![/quote] 就你这样的低水平无知小儿, 也敢也爷爷叫板, 你算个什么东西.[/quote] 继续骂你亲爹![/quote] .................. 你们。。。。。
CSMSDN 2014-01-07
  • 打赏
  • 举报
回复
引用 11 楼 sp1234 的回复:
写SqlHelper当然对于整天写代码要调用几十次的人,很有意义啦。 在这个方法库中,如果一个方法返回类型为 DbDataReader,请谨慎,最好不要设计。你并不能保证使用者会及时关闭连接,因此这种设计就好像“开个小超市但是疏于管理,等于邀请小偷来光顾”,是自找麻烦。 你可以直接返回 IEnumerable<T> 用户定义类型的数据集合。例如对于实体类型
public class MyObj
 {
     public string Name;
     public double Value;
 }
那么直接查询
            List<MyObj> result;
             using (var conn = new OracleConnection(cnStr))
             {
                 conn.Open();
                 var comm = conn.CreateCommand();
                 comm.CommandText = "select TheName, Number from Users ..........";
                 comm.CommandType = System.Data.CommandType.Text;
                 result = ( from DbDataRecord record in comm.ExecuteReader()
                             select new MyObj{ 
                                             Name = (string)record["TheName"],
                                             Value = (double)record["Number"]
                                        };
                          ).ToList();
             }    
或者是,比如说

public static  List<T> ExecuteReader(string SQLString, Func<DbDataReader, List<T>> converter
{
             using (var conn = new OracleConnection(cnStr))
             {
                 conn.Open();
                 var comm = conn.CreateCommand();
                 comm.CommandText = SQLString;
                 comm.CommandType = System.Data.CommandType.Text;
                 return Conveter(comm.ExecuteReader());
             }
}
这样,通过using语法结构,保证了连接的安全。 于是最上面的调用就可以改写为
static List<MyObj> ConvertToMyObjList(DbDataReader dataReader)
{
        return     ( from DbDataRecord record in dataReader
                             select new MyObj{ 
                                             Name = (string)record["TheName"],
                                             Value = (double)record["Number"]
                                        };
                   ).ToList());
}
var result = ExecuteReader("select TheName, Number from Users ..........",  r=> ConvertToMyObjList(r) );
是的,我们在DAL层也是返回数据到BLL层的时候,也是返回iLIST<T>类型的数据,那这个SqlHelper就和DAL绑在一块,也就是只有DAL才使用到SqlHelper,在编写DAL的时候,会及时关才dataReader的。。
CSMSDN 2014-01-07
  • 打赏
  • 举报
回复
引用 10 楼 sp1234 的回复:
呵呵,我基本上不使用关系数据库。因此如果使用,那么直接使用ado.net得基本写法就行了,我不嫌它麻烦,不写SqlHelper。
是的,我们很多项目也不用关系型数据库,但是,财务表表方面,还得依靠,关系型数据库 进行数据完整性管理,并且,相关,关系型数据库也稳定很多。。
王子文龙 2014-01-07
  • 打赏
  • 举报
回复
引用 10 楼 sp1234 的回复:
呵呵,我基本上不使用关系数据库。因此如果使用,那么直接使用ado.net得基本写法就行了,我不嫌它麻烦,不写SqlHelper。
如果写sqlhepler,需要用lock锁住吗
  • 打赏
  • 举报
回复
  • 打赏
  • 举报
回复
嗯,上面的 SqlHelper的方法的参数没有写完整,改一下: public static List<T> ExecuteReader<T>(string SQLString, Func<DbDataReader, List<T>> converter { ......... }
  • 打赏
  • 举报
回复
写SqlHelper当然对于整天写代码要调用几十次的人,很有意义啦。 在这个方法库中,如果一个方法返回类型为 DbDataReader,请谨慎,最好不要设计。你并不能保证使用者会及时关闭连接,因此这种设计就好像“开个小超市但是疏于管理,等于邀请小偷来光顾”,是自找麻烦。 你可以直接返回 IEnumerable<T> 用户定义类型的数据集合。例如对于实体类型
public class MyObj
 {
     public string Name;
     public double Value;
 }
那么直接查询
            List<MyObj> result;
             using (var conn = new OracleConnection(cnStr))
             {
                 conn.Open();
                 var comm = conn.CreateCommand();
                 comm.CommandText = "select TheName, Number from Users ..........";
                 comm.CommandType = System.Data.CommandType.Text;
                 result = ( from DbDataRecord record in comm.ExecuteReader()
                             select new MyObj{ 
                                             Name = (string)record["TheName"],
                                             Value = (double)record["Number"]
                                        };
                          ).ToList();
             }    
或者是,比如说

public static  List<T> ExecuteReader(string SQLString, Func<DbDataReader, List<T>> converter
{
             using (var conn = new OracleConnection(cnStr))
             {
                 conn.Open();
                 var comm = conn.CreateCommand();
                 comm.CommandText = SQLString;
                 comm.CommandType = System.Data.CommandType.Text;
                 return Conveter(comm.ExecuteReader());
             }
}
这样,通过using语法结构,保证了连接的安全。 于是最上面的调用就可以改写为
static List<MyObj> ConvertToMyObjList(DbDataReader dataReader)
{
        return     ( from DbDataRecord record in dataReader
                             select new MyObj{ 
                                             Name = (string)record["TheName"],
                                             Value = (double)record["Number"]
                                        };
                   ).ToList());
}
var result = ExecuteReader("select TheName, Number from Users ..........",  r=> ConvertToMyObjList(r) );
  • 打赏
  • 举报
回复
呵呵,我基本上不使用关系数据库。因此如果使用,那么直接使用ado.net得基本写法就行了,我不嫌它麻烦,不写SqlHelper。
e251396 2014-01-07
  • 打赏
  • 举报
回复
如果要更换数据库还不简单了,加个工厂就可以了,从工厂间切换 。
沐沐坏小孩 2014-01-06
  • 打赏
  • 举报
回复
做个标记。用来学习。
CSMSDN 2014-01-06
  • 打赏
  • 举报
回复
没写过也可以,现有项目的也可以啊。。 贴出来,大家一起分享呗。。。
本拉灯 2014-01-06
  • 打赏
  • 举报
回复
引用 3 楼 hudsonhuang 的回复:
问个问题,如果要换数据库呢?
我自己写了DbHelper 支持Oracle,Access,SqlServer,Sysbase,SQLite,MySQL 够通用了吧。 随意换库。当然一些SQL内部的函数语句要你自己写,一般的Insert select 通用。
zj25810 2014-01-06
  • 打赏
  • 举报
回复
现在好几个项目都用的同一套DbHelperSQL ,真心很久没写过了。
加载更多回复(5)

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧