通宵达旦写了个数据库操作类,大家给指点一下。 在设计之初,我的做法是:建立命令对象的时候,针对存储过程和sql查询语句加上是否存在参数,重载了四个版本方法(建立命令对象)。又针对这四个版本的方法,又分别建立了四个执行这些命令的方法。大家觉得我这种做法和我以上发的代码比较有何优缺点?请朋友们指点一二。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 LZ可能用着习惯,换我就用不惯了,增删改的不知道影响行数,查询也没个返回Dataset的,而且CreatePara这个方法好象用处也不大,和直接new个SqlParameter差不多,灵活性或许更小些. 1.public static SqlConnection CreateCon()//为什么要静态?2. public static SqlConnection CreateCon()//创建数据库连接。 { return new SqlConnection(ConStr); } public static SqlConnection CreateCon(string _conStr)// 重载数据库连接。 { return new SqlConnection(_conStr); } //写2个有必要吗? //为什么口不开在 private static string ConStr="data source=(local);data //base=myproject;uid=sa;pwd="; //用户要重载数据库连接就把值设到string ConStr3. public SqlDataReader RunProcedure(string storedProcName, IDataParameter[] parameters ) { SqlDataReader returnReader; SqlCn.Open(); SqlCommand command = BuildQueryCommand( storedProcName, parameters ); command.CommandType = CommandType.StoredProcedure; returnReader = command.ExecuteReader(CommandBehavior.CloseConnection); return returnReader; }4.参数名_sqlStr,_paras, _cmdType前面的一杠什么意思,如果我是个程序员使用这个类,我可能会去猜测这些和sqlStr,sqlStr,cmdType有什么关系,有特殊含义吗?还是根本就是一样的.暴露给外面的最好简洁易懂 呵呵,看你到处到new,却没看到dispose() 你可以先学习学习别人的,开元的,站在别人的肩膀上面,再写写看http://www.cnblogs.com/jhtchina/articles/245512.html这个是2年多以前的了,现在早就不用这个了你可以多学学NHb 其它的就不说了...参数命名决不允许下划线开始如 _sqlStr 之类... 你连个返回数据库操作影响行数都没加,没什么实际意义再者,你连接的关闭要么用USING ,要么用FINALLY{}关闭,不然会出现N多问题其他的要多参考其他人写的,现在这类非常多 sqlhelper是开源的建议楼主看看人家写的。 你可以先学习学习别人的,开元的,站在别人的肩膀上面,再写写看http://www.cnblogs.com/jhtchina/articles/245512.html这个是2年多以前的了,现在早就不用这个了你可以多学学NHb-----------------------------------现在已经开始不用NHb 了, 你可以多学学Nbear的思想,做法 前不久我也写了个给你一些提示,你可以写得更好些,我就不说语言上的问题了,就谈谈设计:1.你的静态方法考虑是正确的,但是你的连接字符串每次都用能不能用静态变量呢?2.你能不能考虑提供对多数据库的支持,你这只是Sql Server的啊,提示你用IDB...3.暴露的参数太多,希望只提供string和object[]形式的参数就能够执行数据库操作,想想怎么实现提示你存储过程的参数名和类型是不需要让调用者做的,看看这个存储过程sp_proc_parameters_rowset,应该明白我说什么了吧。4.高级点的话题了,利用AOP实现Connection.Open和Close,这样你可以更容易的添加事务支持。这个比较深入了,你可以查查相关资料。呵呵。 去看看petshop4.0里面的SQLServerHelp.cs你就会明白了作为一个轻量级数据库访问类应该做到些什么。 ORM NHibernate不错,我已经自己写一些Libary了,类似数据工厂一样的东西,还有接口,搂主还只是很简单的一个数据库底层操作类,使用价值不大。 Cookies问题—Page与HttpContext 在cs里怎么写正则表达式? 如何用ASP.NET接收电子邮件? 谁知道aop.net是什么东西? 页面怎么加锚点呀? ========求一sql语句,不知能否实现,大哥们? DS问题,,那里错了,'System.Data.DataTableCollection' 弄了半天都没有解决 sqlserver有两条相同数据 怎么修改其中一条 怎样创建基于HTMLINPUTFILE的自定义控件,并可添加到TOOLBOX中去? 急需一个能接受 中文的POP3组件!谢谢 soa到底是什么?谁可以谈谈看法,以及相关的技术 如何确保数据更新的同步性
{
return new SqlConnection(ConStr);
} public static SqlConnection CreateCon(string _conStr)// 重载数据库连接。
{
return new SqlConnection(_conStr);
}
//写2个有必要吗?
//为什么口不开在 private static string ConStr="data source=(local);data //base=myproject;uid=sa;pwd=";
//用户要重载数据库连接就把值设到string ConStr
3.
public SqlDataReader RunProcedure(string storedProcName, IDataParameter[] parameters )
{
SqlDataReader returnReader; SqlCn.Open();
SqlCommand command = BuildQueryCommand( storedProcName, parameters );
command.CommandType = CommandType.StoredProcedure; returnReader = command.ExecuteReader(CommandBehavior.CloseConnection);
return returnReader;
}4.参数名_sqlStr,_paras, _cmdType前面的一杠什么意思,如果我是个程序员使用这个类,我可能会去猜测这些和sqlStr,sqlStr,cmdType有什么关系,有特殊含义吗?还是根本就是一样的.暴露给外面的最好简洁易懂
http://www.cnblogs.com/jhtchina/articles/245512.html
这个是2年多以前的了,现在早就不用这个了
你可以多学学NHb
再者,你连接的关闭要么用USING ,要么用FINALLY{}关闭,不然会出现N多问题
其他的要多参考其他人写的,现在这类非常多
http://www.cnblogs.com/jhtchina/articles/245512.html
这个是2年多以前的了,现在早就不用这个了
你可以多学学NHb
-----------------------------------
现在已经开始不用NHb 了, 你可以多学学Nbear的思想,做法
给你一些提示,你可以写得更好些,我就不说语言上的问题了,就谈谈设计:
1.你的静态方法考虑是正确的,但是你的连接字符串每次都用能不能用静态变量呢?
2.你能不能考虑提供对多数据库的支持,你这只是Sql Server的啊,提示你用IDB...
3.暴露的参数太多,希望只提供string和object[]形式的参数就能够执行数据库操作,想想怎么实现提示你存储过程的参数名和类型是不需要让调用者做的,看看这个存储过程sp_proc_parameters_rowset,应该明白我说什么了吧。
4.高级点的话题了,利用AOP实现Connection.Open和Close,这样你可以更容易的添加事务支持。这个比较深入了,你可以查查相关资料。
呵呵。