提高C#中sql语句组合的复用性

提高C#中sql语句组合的复用性之前为了提升复用性和灵活性,都是直接拼接sql的方式,不过这样会导致可能存在sql注入的风险。今天结合C#的语法改进了一下,感觉效果还不错,分享

大家好,欢迎来到IT知识分享网。

之前为了提升复用性和灵活性,都是直接拼接sql的方式,不过这样会导致可能存在sql注入的风险。

今天结合C#的语法改进了一下,感觉效果还不错,分享给大家。

大家也可以看看还有没有更优雅的写法。

以判断一个用户名是否可以被注册为例,重点是以下两个关键函数:

static public bool is_repeat(string loginname) { BAL.User dal = new BAL.User(); dal.wheres.appendSql("username", " LoginName = @LoginName Or Mobile = @LoginName Or EMail = @LoginName "); var tuples = new List<Tuple<string, object>>() { new Tuple<string, object>("LoginName", loginname), }; SqlParameter[] param = dal.Tuples2SqlParam(tuples); return dal.HasRecord(param); }
protected SqlParameter[] Tuples2SqlParam(List<Tuple<string, object>> tuples) { List<SqlParameter> listParams = new List<SqlParameter>(); foreach (var tuple in tuples) { listParams.Add(new SqlParameter("@" + tuple.Item1, tuple.Item2)); } return listParams.ToArray() as SqlParameter[]; }

借助了Tuple模板。

在sql语句组合过程中,对应的就是appendSql,可以自由组合查询条件,也不用区分数据类型;

由于可能涉及到各种各样的值,在tuples数组构造时根据实际需要动态增加就好。

不过有点遗憾的函数中param参数不支持二维数组的方式,不然把写成Tuples2SqlParam写成

protected SqlParameter[] Tuples2SqlParam(param <Tuple<string, object>> tuple)

的方式就更方便了。

不过对比我之前的写法:

 protected SqlParameter[] Model2SqlParam4Reg(Model.User model) { List<SqlParameter> listParams = new List<SqlParameter>(); listParams.Add(new SqlParameter("@LoginName", model.LoginName)); listParams.Add(new SqlParameter("@Password", model.Password)); return listParams.ToArray() as SqlParameter[]; }

有多少业务场景就得写多少种转换函数,复用性还是提升了不少。

提高C#中sql语句组合的复用性

你有啥好建议吗?

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/55272.html

(0)
上一篇 2024-07-26 09:26
下一篇 2024-07-30 20:33

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

关注微信