use Shop create table DictBase(Id int identity(1,1) primary key,Name nchar(10))
insert into DictBase select '包裝' UNION ALL select '價格' UNION ALL select '品牌'
工廠方法模式
IDAL層(添加一個IDictBase接口,在里面定義一個方法)

using System; using System.Collections.Generic; using System.Data; namespace Letao.IDAL { /// <summary> /// 接口:類別字典鍵 /// </summary> public interface IDictBase { #region 獲取 /// <summary> /// 獲取所有字典鍵名 /// </summary> List<Model.DictBase> Get(); #endregion } }
DALFactory層(DataAccess新建接口實現工廠模式CreateDictBase)

using System; using System.Reflection; using System.Configuration; using Letao.IDAL; namespace Letao.DALFactory { /// <summary> /// 工廠反射層 /// </summary> public sealed class DataAccess { private static readonly string AssemblyPath = ConfigurationManager.AppSettings["SQLServerDAL"]; /// <summary> /// 類別字典鍵名 /// </summary> public static Letao.IDAL.IDictBase CreateDictBase() { string ClassNamespace = AssemblyPath + ".DictBase"; return (IDictBase)Assembly.Load(AssemblyPath).CreateInstance(ClassNamespace); } } }
SQLServerDAL層(在項目中添加類DictBase,繼承自接口IDictBase,實現的方法是向控制台輸出所有字典鍵名)
using System; using System.Data; using System.Data.SqlClient; using System.Collections.Generic; namespace Letao.SQLServerDAL { /// <summary> /// 類別字典鍵 /// </summary> class DictBase:IDAL.IDictBase { #region 獲取 /// <summary> /// 獲取所有字典鍵名 /// </summary> public List<Model.DictBase> Get() { string sql = string.Format("select * from DictBase"); List<Model.DictBase> list = new List<Model.DictBase>(); using(SqlDataReader dr=DBUtility.DbHelperSQL.ExecuteReader(ConnString.connReadonly,CommandType.Text,sql,null)) { while(dr.Read()) { Model.DictBase model = new Model.DictBase(); object obj; obj = dr["Id"]; if(obj!=null &&obj!=DBNull.Value) { model .Id =(int )obj; } model.Name = dr["Name"].ToString(); list.Add(model ); } } return list; } } }
BLL層(創建一個DictBase的工廠類,使它繼承自CreateDictBase接口,創建一個方法,使它的返回值為IDictBase,最后在方法的實現里面返回實例化的DictBase)

using System; using System.Collections.Generic; namespace Letao.BLL { /// <summary> /// 類別字典鍵 /// </summary> public class DictBase { protected static Letao.IDAL.IDictBase dal =Letao .DALFactory .DataAccess.CreateDictBase(); /// <summary> /// 獲取所有字典鍵名 /// </summary> public static List<Model.DictBase> Get() { return dal.Get(); } } }
Model層(DictBase類)

using System; namespace Letao.Model { /// <summary> /// 類別字典鍵 /// </summary> public class DictBase { /// <summary> /// 字典健名編號 /// </summary> public int Id { get; set; } /// <summary> /// 字典關鍵字 /// </summary> public string Name{ get; set; } } }
備注:
DBUtility層(DbHelperSQL類、ConnString類)

using System; using System.Data; using System.Data.SqlClient; namespace Letao.DBUtility { public class DbHelperSQL { /// <summary> /// 返回數據內容(SqlDataReader) /// </summary> /// <param name="connectionString">數據庫連接字符串</param> /// <param name="cmdType">執行類型(過程/語句)</param> /// <param name="cmdText">執行的過程名稱/查詢語句</param> /// <param name="commandParameters">command執行的SqlParameter[]數組</param> /// <returns>SqlDataReader 返回執行后的數據內容</returns> public static SqlDataReader ExecuteReader(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters) { SqlCommand cmd = new SqlCommand(); SqlConnection conn = new SqlConnection(connectionString); try { PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters); SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection); cmd.Parameters.Clear(); return rdr; } catch { //Close(conn); //Dispose(conn); throw; } } } }

using System; namespace Letao.SQLServerDAL { /// <summary> /// 數據庫連接字符串 /// </summary> class ConnString { /// <summary> /// 讀寫數據庫連接字符串 /// </summary> public static string conn { get { if (_conn == null) { _conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionStringWrite"].ToString(); } return _conn; } } private static string _conn = null; /// <summary> /// 只讀數據庫連接字符串 /// </summary> public static string connReadonly { get { if (_connReadonly == null) { _connReadonly = System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionStringReadonly"].ToString(); } return _connReadonly; } } private static string _connReadonly = null; } }
接下來添加App.config文件,來實現系統所選擇的數據庫是什么數據庫

<?xml version="1.0"?> <appSettings> <add key="title" value="樂淘"/> <add key="SQLServerDAL" value ="Letao.SQLServerDAL"/> </appSettings>
頁面
<html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> <script src="/Admin/Scripts/jquery-1.8.3.min.js" type="text/javascript"></script> </head> <body> <div> <ul id="dictbase"></ul> </div> <script type="text/javascript"> $(function () { $.getJSON('test.aspx?action=get', function (json) { var _html = []; for (var key in json) { _html.push('<li data="' + json[key].Id + '">' + json[key].Name + '</li>'); } $("#dictbase").empty().append(_html.join('')); }); }) </script> </body> </html>
protected void Page_Load(object sender, EventArgs e) { if (Request.Headers["X-Requested-With"] != null && Request.Headers["X-Requested-With"].ToLower() == "XMLHttpRequest".ToLower()) { Response.Clear(); Response.ContentType = "application/json"; if (Request["action"] == "get") Response.Write(GetJson()); Response.End(); } } protected string GetJson() { System.Web.Script.Serialization.JavaScriptSerializer json = new System.Web.Script.Serialization.JavaScriptSerializer(); List<Letao.Model.DictBase> list = new List<Letao.Model.DictBase>(); list = Letao.BLL.DictBase.Get(); return json.Serialize(list); }
效果
知識點:
1、從數據庫轉換成json字符串
2、X-Requested-With是否是第一次加載
谷歌瀏覽器審查元素后的結果
參考網址:1、ASP.NET用SQL Server中的數據來生成JSON字符串
http://www.cnblogs.com/jacksonwj/archive/2008/08/10/1264525.html
2、asp.net 簡單工廠模式和工廠方法模式之論述
http://www.jb51.net/article/29212.htm