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

asp.net用sql数据库生成json字符串并显示出来的更多相关文章

  1. 识别Json字符串并分隔成Map集合

    识别Json字符串并分隔成Map集合 前言: 最近又看了点Java的知识,于是想着把CYQ.Data V5迁移到Java版本. 过程发现坑很多,理论上看大部分很相似,实践上代码写起来发现大部分都要重新 ...

  2. Asp.Net MVC 从数据库生成代码(包括页面)

    项目需要,数据库已经设计完成,需要生成相关的数据访问代码和页面. 参考:http://www.tracefact.net/asp-net/aspnetmvc-model-part1.aspx http ...

  3. 在SQL 中生成JSON数据

    这段时间接手一个数据操作记录的功能,刚拿到手上的时候打算用EF做,后来经过仔细考虑最后还是觉定放弃,最后思考再三决定: 1.以模块为单位分表.列固定(其实可以所有的操作记录都放到同一个表,但是考虑到数 ...

  4. 批量生成随机字符串并保存到excel

    需要导入jxl.jar,commons-lang-2.6.jar 链接:https://pan.baidu.com/s/1NPPh24XWxkka68x2JQYlYA 提取码:jvj3 链接:http ...

  5. SQL随机生成数值字符

    1.随机生成0~N之间的数值 ROUND(RAND()*N,0) 2.随机生成Min~Max之间的数值 ROUND(RAND()*(Max-Min),0)+Min 3.随机生成大写字母 CHAR(RO ...

  6. Java版本:识别Json字符串并分隔成Map集合

    前言: 最近又看了点Java的知识,于是想着把CYQ.Data V5迁移到Java版本. 过程发现坑很多,理论上看大部分很相似,实践上代码写起来发现大部分都要重新思考方案. 遇到的C#转Java的一些 ...

  7. java对象转化为json字符串并传到前台

    package cc.util; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import ...

  8. Android获取服务器Json字符串并显示在ListView上面

    已经好久没有更新博客,今天终于有新的东西可以记录了. 通过这次的任务学习到了以前没有注意到的知识点,真的有种书读百遍,其义自见的感觉.这次又重新认识了<Handler消息机制原理>.这次的 ...

  9. 菜鸟学习Spring——SpringMVC注解版在服务器端获取Json字符串并解析

    一.概述. SpringMVC在服务端把客户端传过来的JSON字符串,并把JSON字符串转成 JSON对象并取得其中的属性值,这个在项目中经常用到. 二.代码演示. 需要添加的jar包. 2.1 we ...

随机推荐

  1. 暴力解决HTMLTestRunner出现dict() ->new empty dictionary的问题

    在使用ddt数据驱动之后,HTMLTestRunner报告的用例名称之后出现dict() ->new empty dictionary,如下图所示: 经排查,发现是因为ddt源码中test_do ...

  2. 正则表达式(Regular Expression, RegEx)学习入门

    1. 概述 正则表达式(Regular Expression, RegEx)是一种匹配模式,描述的是一串文本的特征. 正如自然语言中高大.坚固等词语抽象出来描述事物特征一样,正则表达式就是字符的高度抽 ...

  3. PHP之即点即改

    html: <td data-hide="1200" class="px12" id ="<?php echo $v['g_id'];?& ...

  4. 值得收藏的Python第三方库

    网络站点爬取 爬取网络站点的库Scrapy – 一个快速高级的屏幕爬取及网页采集框架.cola – 一个分布式爬虫框架.Demiurge – 基于PyQuery 的爬虫微型框架.feedparser ...

  5. Go语言学习笔记(6)——指针

    指  针 指针: 存储另一个变量的内存地址的变量: Go语言的取地址符号也是& 1. 声明指针: var needle_name *type var b int = 10 var a *int ...

  6. Ubuntu16.04 换源(或者404 Not Found问题)

    当执行sudo apt-get update或者sudo apt-get install命令时,出现以下两个问题: “apt-get 404 Not Found Package Repository ...

  7. Scratch:海龟绘图(九)

    在本课的前导部分,我们说到怎么做才能成为一个负责任的“程序猿”.我认为,负责任的程序员决不会草率的处理任何“函数接口”. 比如这个“画圆”函数,程序员就会认真推敲“哪些参数是必要的.哪些参数又是多余的 ...

  8. 无服务架构在IOT的应用场景——使用函数工作流处理DIS数据

    在物联网领域,复杂性往往并非在于传感器,真正的复杂性在于各种传感器产生的大量数据,以及对这些数据的处理,所以开发者不得不花费大量的时间去构建和维护后端服务器来处理这样一个庞大的数据流.而在今天这个敏捷 ...

  9. 【微信支付】公众号 JSAPI支付 HTML5(使用MUI前端框架)+WebApi 实现流程

    必要参数:      1) AppID,AppSecret : 在微信公众号后台管理—>(菜单栏)开发 —> 基本设置     2)商户号 :在微信公众号后台管理—>(菜单栏)微信支 ...

  10. JQuery攻略读书笔记---第2章 数组

      2 数组2.8 创建对象数组循环数组2.9 数组排序 2 数组 2.8 创建对象数组 //数组化对象 var student =[ { "role":101, "na ...