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. LaTeX 一些用法实例(并列图片、并列表格、算法代码示例、页眉太长、下划线,等)

    横向并列两个图片 \begin{figure} \begin{minipage}{0.49\linewidth} \centering \includegraphics[width=6.5cm]{Si ...

  2. Python笔记002-Python编程基础概念

    第二章(1):Python编程基础概念 1. Python 程序的构成 Python 程序有模块组成.一个模块对应 Python 源文件,一般后缀名是:.py. 模块有语句组成.运行 Python程序 ...

  3. pandas之数据IO笔记

    pandas在进行数据存储与输出时会做一些相应的操作 1.*索引:将一个列或多个列读取出来构成DataFrame,其中涉及是否从文件中读取索引以及列名 2 *类型推断和数据转换:包括用户自定义的转换以 ...

  4. Spring 后台方法 重定向 与 转发

    一.重定向:重定向是客户端行为,在使用时,务必使用全路径,否则可能因为外部环境导致错误 1.URL改变为重定向的URL地址 2.前台页面不能使用Ajax请求提交, 应该使用form表单提交 方法一.参 ...

  5. mysql cmd命令行 创建数据库 表 基础语句

    一.连接MYSQL 格式: mysql -h主机地址 -u用户名 -p用户密码 1. 连接到本机上的MYSQL. 首先打开DOS窗口,然后进入目录mysql\bin,再键入命令mysql -u roo ...

  6. TCP/IP及http协议 SOAP REST

    TCP/IP及http协议: TCP/IP协议主要解决数据如何在网络中传输, 而HTTP是应用层协议,主要解决如何包装数据 SOAP:简单对象访问协议(Simple Object Access Pro ...

  7. PHP常见算法

    算法的概念:解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作.一个问题可以有多种算法,每种算法都不同的效率.一个算法具有的特征:有穷,确切,输入,输出,可行 ...

  8. python3爬虫之requests库基本使用

    官方文档链接(中文) https://2.python-requests.org/zh_CN/latest/ requests  基于  urllib3 ,python编写. 安装 pip insta ...

  9. ffmpeg 命令的使用

    当然先安装了 gentoo 下一条命令搞定 emerge  ffmpeg 格式转换 (将file.avi 转换成output.flv) ffmpeg -i  file.avi  output.flv ...

  10. springload热更新的优缺点

    java开发web应用没有.net的方便快捷, 原因是传统开发模式下新增修改代码后要查看效果, 一般要重启应用, 导致浪费了许多无谓的时间,没有.net的高效, 任意更新文件实时生效. 但是有个叫sp ...