定义一个 GlobalSqlConfigHelper 类,实现读取 XML 文件中的 SQL 语句。
2011-12-19 14:22
691 查看
以前在项目中,常常图简单,直接把 SQL 语句写到代码中,比如:
现在考虑到 SQL 语句硬编码到代码中,不利于维护(PS:sql 语句小改一下就要重新编译源程序),决定把这些 SQL 统一放到一个单独的 XML 文件中。
比如在 App_Data 文件夹下新建一个 GlobalSql.xml 文件,格式如下:
然后在 Web.Config 文件中的 AppSetting 中配置一下这个路径:
个人建议放在 AppData 中,因为放在其他的地方可能被客户端通过 Http 请求来下载,除非你屏蔽对这个文件的请求,额外的工作量,如果你想偷懒的话。
下面是重点了,定义一个 GlobalSqlConfigHelper.cs ,以实现读取 SQL。至于位置,建议不放在 WebUI 和 DAL 层,单独放在一个层中,然后 DAL 层添加对这个层的引用。
下面直接贴代码了:
在 DAL 层添加对这个层的引用后,然后在需要的地方引用命名空间,然后比如:
最后,由于是 Demo ,做得很简单,如果用到项目中,最后实现在 Application_Start 中验证这个 XML 文件是否存在,格式是否正确等等。
谢谢浏览!
public static void DeleteAllUsers() { string sql = "delete from UserInfo"; DBHelper.ExecuteCommand(sql); }
现在考虑到 SQL 语句硬编码到代码中,不利于维护(PS:sql 语句小改一下就要重新编译源程序),决定把这些 SQL 统一放到一个单独的 XML 文件中。
比如在 App_Data 文件夹下新建一个 GlobalSql.xml 文件,格式如下:
<?xml version="1.0" encoding="utf-8" ?> <sqls> <sql key="UserInfoDAL.GetAllValidUsers"> select * from UserInfo where IsValid <> 0 </sql> <sql key="UserInfoDAL.GetAllMaleValidUsers"> <![CDATA[ select * from UserInfo where IsValid <> 0 and Sex=1 ]]> </sql> </sqls>
然后在 Web.Config 文件中的 AppSetting 中配置一下这个路径:
<appSettings> <add key="SqlConfigFilePath" value="\App_Data\sGlobalSql.xml"/> </appSettings>
个人建议放在 AppData 中,因为放在其他的地方可能被客户端通过 Http 请求来下载,除非你屏蔽对这个文件的请求,额外的工作量,如果你想偷懒的话。
下面是重点了,定义一个 GlobalSqlConfigHelper.cs ,以实现读取 SQL。至于位置,建议不放在 WebUI 和 DAL 层,单独放在一个层中,然后 DAL 层添加对这个层的引用。
下面直接贴代码了:
using System; using System.Configuration; using System.Xml; using System.IO; using System.Collections.Generic; namespace LoadXmlSqlFile.Utility { public static class GlobalSqlConfigHelper { /// <summary> /// 从配置文件获取 GlobalSql.xml 的路径 /// </summary> private static readonly string SqlConfigFilePath = AppDomain.CurrentDomain.BaseDirectory + ConfigurationManager.AppSettings["SqlConfigFilePath"]; /// <summary> /// 读取 GlobalSql.xml 中的 sql 集合 /// </summary> /// <returns></returns> private static XmlNodeList Read() { if (!File.Exists(SqlConfigFilePath)) { throw new FileNotFoundException(string.Format("GlobalSql.xml 文件 {0} 未找到!", SqlConfigFilePath)); } XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(SqlConfigFilePath); return xmlDoc.DocumentElement.SelectNodes("sql"); } private static XmlNodeList _allSqlNodeList; private static XmlNodeList AllSqlNodeList { get { if (_allSqlNodeList == null) { _allSqlNodeList = Read(); } return _allSqlNodeList; } } /// <summary> /// 清除缓存 /// </summary> public static void ClearCache() { _allSqlNodeList = null; } /// <summary> /// 根据 Key 得到对应的 Sql 语句 /// </summary> /// <param name="key">Sql 语句的 Key</param> /// <returns></returns> public static string GetSql(string key) { if(string.IsNullOrEmpty(key)) { throw new ArgumentNullException("key"); } string result = null; foreach (XmlNode oneItem in AllSqlNodeList) { if(oneItem.Attributes["key"].Value == key) { result = oneItem.InnerText; break; } } if(result == null) { throw new KeyNotFoundException(string.Format("GlobalSql.xml 文件中,key 为 {0} 的 SQL 语句未找到!", key)); } return result; } } }
在 DAL 层添加对这个层的引用后,然后在需要的地方引用命名空间,然后比如:
using System; using LoadXmlSqlFile.Utility; namespace LoadXmlSqlFile.WebUI { public static class UserInfoDAL { public static void GetAllValidUsers() { string sql = GlobalSqlConfigHelper.GetSql("UserInfoDAL.GetAllValidUsers"); DBHelper.ExecuteQuery(sql); } public static void GetAllMaleValidUsers() { string sql = GlobalSqlConfigHelper.GetSql("UserInfoDAL.GetAllMaleValidUsers"); DBHelper.ExecuteQuery(sql); } } }
最后,由于是 Demo ,做得很简单,如果用到项目中,最后实现在 Application_Start 中验证这个 XML 文件是否存在,格式是否正确等等。
谢谢浏览!
相关文章推荐
- mybatis-config.xml配置文件及sql分页查询的实现
- Demo: Dictionary>> 泛型读取XML文件数据作为数据源(DataSource)绑定到DropDownList控件 定义个一个公用类
- 一个经过改良的XMLHelper(包含了序列化,反序列化,创建xml文件,读取节点,C#对象与xml文件的相互转换等等。)
- sql语句放到外部xml文件里,读取操作
- 一个经过改良的XMLHelper(包含了序列化,反序列化,创建xml文件,读取节点
- 在/sys目录下建立一个文件,并且实现信息的读取和存储
- java 读取xml文件开头多了一个问号
- Java读取Excel文件,生成SQL语句
- java创建一个类实现读取一个文件中的每一行显示出来
- 用Perl写一个读取nginx配置文件到csv,实现域名与IP对应的实用程序
- config/config_global.php Discuz后台运行SQL语句功能关闭
- 得用SQL语句生成某个库下所有存储过程脚本,并每个存为一个文件
- 实现常用的配置文件/初始化文件读取的一个C程序
- sql 语句 编写一个函数实现将货币值用中文输出,例如12340.56,输出为:壹万二仟叁佰肆拾元伍角六分
- 读取文件批量生成标准sql语句
- struts+hibernate+oracle+easyui实现lazyout组件的简单案例——hibernate的config文件(hibernate.cfg.xml)
- Java定义一个用来保存全局字符串的properties文件并用ResourceBundle读取它
- poi读取xls文件并生成sql语句
- QT读取xml文件,然后写入另外一个新的xml文件
- 一个sql语句实现状态来回变化的方法