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. Postman和jmeter的区别

    1.创建接口用例集(没区别) Postman是Collections,Jmeter是线程组,没什么区别. 2.步骤的实现(有区别) Postman和jmeter都是创建http请求 区别1:postm ...

  2. chrome中显示DNS_PROBE_FINISHED_NO_INTERNET无法上网,但是IE可以上

    以管理员方式运行cmd,执行如下命令 ipconfig /release ipconfig /all ipconfig /flushdns ipconfig /renew netsh int ip s ...

  3. Mysql slave 延迟故障一列(无主键)

    首先还是给出我见过的一些延迟可能: 大事物延迟 延迟略为2*执行时间 状态为:reading event from the relay log 大表DDL延迟 延迟略为1*执行时间 状态为:alter ...

  4. redis字符串类型的基本命令

    1.redis字符串类型键的设置 命令名称:SET 语法:set key value [EX seconds] [PX milliseconds] [NX|XX] 功能:给一个key添加字符串类型的值 ...

  5. 解决GitHub下载速度缓慢的问题

    随着微软大大宣布GitHub针对个人用户的仓库免费,相信每位开发者都感受到了"真香". 然而因为一些众所周知的原因,国内访问GitHub总会遇到下载速度缓慢.链接意外终止的情况. ...

  6. c#基础知识梳理(三)

    上期回顾 - https://www.cnblogs.com/liu-jinxin/p/10824638.html 一.方法 一个方法是把一些相关的语句组织在一起,用来执行一个任务的语句块.每一个 C ...

  7. centos 随机启动脚本编写

    先说下问题背景 目前手上开发的产品是springboot微服务的,我们用jenkins来做的部署,部署脚本如下: 1.build脚本 负责从git服务器拉脚本 2.微服务脚本: #!/bin/shap ...

  8. JAVA文件IO总结

    文件流的操作有两种:字节流.字符流 字节流:FileInputStream,FileInputStream 字符流:InputStreamReader,OutputStreamReader 这两种流对 ...

  9. 【多进程】php多进程编程

    先看下我已经安装的php版本 PHP (cli) (built: Jul ::) ( NTS ) Copyright (c) - The PHP Group Zend Engine v3.- Zend ...

  10. ElasticSearch做实时OLAP框架~实时搜索、统计和OLAP需求,甚至可以作为NOSQL来使用(转)

    使用ElasticSearch作为大数据平台的实时OLAP框架 – lxw的大数据田地 http://lxw1234.com/archives/2015/12/588.htm 一直想找一个用于大数据平 ...