asp.net用sql數據庫生成json字符串並顯示出來


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;
            }
        }
    }
}
返回數據內容(SqlDataReader)
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>
App.config文件

 頁面

<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

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM