基于asp.net MVC 的服务器和客户端的交互(一)
架构思想
三层架构
提出了一种基于ASP.NET开发方式的三层架构的Web应用系统构造思想。其基本内容是:将面向对象的UML建模与Web应用系统开发
相结合,将整个系统分成适合ASP.NET开发方式的应用表示层、业务逻辑层、数据访问层和数据存储层四层结构。以此方式构造的Web应用
不仅达到了代码组织结构清晰明朗、高重用性、适用性,易于维护和移植的目标,而且可以提高web应用系统的开发速度。解决了目前大型
Web程序开发中,代码适用性、重用性差,及难于维护和移植的问题。
mvc框架
MVC 是三种 ASP.NET 编程模式中的一种。
MVC 是一种使用 MVC(Model View Controller 模型-视图-控制器)设计创建 Web 应用程序的模式:
MVC 模式同时提供了对 HTML、CSS 和 JavaScript 的完全控制。
Model(模型)是应用程序中用于处理应用程序数据逻辑的部分。
通常模型对象负责在数据库中存取数据。
View(视图)是应用程序中处理数据显示的部分。
通常视图是依据模型数据创建的。
Controller(控制器)是应用程序中处理用户交互的部分。
通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。
MVC 分层有助于管理复杂的应用程序,因为您可以在一个时间内专门关注一个方面。例如,您可以在不依赖业务逻辑的情况下专注于视图设
计。同时也让应用程序的测试更加容易。
MVC 分层同时也简化了分组开发。不同的开发人员可同时开发视图、控制器逻辑和业务逻辑。
客户端与服务端的交互形式
在服务器端如何去获取数据库中的数据,并且对数据进行处理?如何建立与数据库的连接?如何对多个数据进行打包以实现服务器和客户端信息的交互?
如果是手机开发就是注重客户端的部分,后台的数据和程序基本没有改变。
我们以asp.net 服务端连接SQL Server2012为例
<connectionStrings>
<add name="DefaultConnection" providerName="System.Data.SqlClient" connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=aspnet-CP_campus_WebApp-20150822102435;Integrated Security=SSPI" />
<add name="connStr" connectionString="server=.;uid=sa;pwd=123456;database=dataSet"/>
</connectionStrings>
“connStr”:就是我们连接数据库的字符串
当我们SQL Server数据库中使用SQL身份认证时,
“uid”:账号 ,“pwd”:密码
//数据库连接字符串(web.config来配置),多数据库可使用DbHelperSQLP来实现.
public static string connectionString = PubConstant.ConnectionString;
例如可以通过查询某一字段来判断是否存在该字段
/// <summary>
/// 判断是否存在某表的某个字段
/// </summary>
/// <param name="tableName">表名称</param>
/// <param name="columnName">列名称</param>
/// <returns>是否存在</returns>
public static bool ColumnExists(string tableName, string columnName)
{
string sql = "select count(1) from syscolumns where [id]=object_id('" + tableName + "') and [name]='" + columnName + "'";
object res = GetSingle(sql);
if (res == null)
{
return false;
}
return Convert.ToInt32(res) > 0;
}
也可以将数据的相关操作代码进行封装在一个静态类中,然后进行调用
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.OleDb;
using System.Data;
using System.Data.SqlClient; namespace CETP
{
class SqlHelper
{
/// <summary>
/// 获取配置文件中的数据库连接字符串信息
/// </summary>
private static string connStr = @"Data Source=CSIM;Initial Catalog=CETP;Integrated Security=True"; /// <summary>
/// 自定义ExecuteNonQuery操作
/// </summary>
/// <param name="sql">需要执行的SQL语句(Insert,Update,Delete)</param>
/// <param name="parameters">长度可变数组,存储SQL语句中的变量值</param>
/// <returns>返回执行SQL语句后数据库受到影响的行数</returns>
public static int ExecuteNonQuery(string sql, params SqlParameter[] parameters)
{
using (SqlConnection conn = new SqlConnection(connStr))
{
conn.Open();
using (SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText = sql;
cmd.Parameters.AddRange(parameters);
return cmd.ExecuteNonQuery();
}//end of using
}// end of using
} //end of ExecuteNonQuery /// <summary>
/// 自定义ExecuteScalar操作
/// </summary>
/// <param name="sql">需要执行的SQL语句</param>
/// <param name="parameters">长度可变数组,存储SQL语句中的变量值</param>
/// <returns>返回执行SQL语句所得数据集的第一行第一列</returns>
public static object ExecuteScalar(string sql, params SqlParameter[] parameters)
{
using (SqlConnection conn = new SqlConnection(connStr))
{
conn.Open();
using (SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText = sql;
cmd.Parameters.AddRange(parameters);
return cmd.ExecuteScalar();
}//end of using
}//end of using
}//end of ExecuteScalar /// <summary>
/// 自定义ExecuteReader操作
/// </summary>
/// <param name="sql">需要执行的SQL查询语句</param>
/// <param name="parameters">长度可变数组,存储SQL语句中的变量值</param>
/// <returns>返回查询结果集</returns>
public static SqlDataReader ExecuteReader(string sql, params SqlParameter[] parameters)
{
SqlConnection conn = new SqlConnection(connStr); conn.Open();
using (SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText = sql;
cmd.Parameters.AddRange(parameters);
return cmd.ExecuteReader();
}//end of using
//end of using
}//end of OleDbDataReader /// <summary>
/// 自定义ExecuteDataTable操作,只用来执行查询结果比较小的时候
/// </summary>
/// <param name="sql">需要执行的SQL查询语句</param>
/// <param name="parameters">长度可变数组,存储SQL语句中的变量值</param>
/// <returns>返回执行SQL语句后的数据集</returns>
public static DataTable ExecuteDataTable(string sql, params SqlParameter[] parameters)
{
using (SqlConnection conn = new SqlConnection(connStr))
{
conn.Open();
using (SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText = sql;
cmd.Parameters.AddRange(parameters);
SqlDataAdapter adapter = new SqlDataAdapter(cmd);
DataSet dataset = new DataSet();
adapter.Fill(dataset);
return dataset.Tables[0];
}//end of using
}//end of using
}//end of ExecuteDataTable /// <summary>
/// 判断从数据库里取出的值是否为null,并进行转换
/// </summary>
/// <param name="value">从数据库里取出的值</param>
/// <returns>如果数据库中该值为DBNull,则转换为null后返回;否则直接返回该值</returns>
public static object FromDbValue(object value)
{
if (value == DBNull.Value)
{
return null;
}
else
{
return value;
}//end of if
}//end of FromDbValue /// <summary>
/// 判断将要写入数据库的值是否为null,并进行转换
/// </summary>
/// <param name="value">将要写入数据库的值</param>
/// <returns>如果要写入的值为null,则将其转换成DBNull后返回;否则直接返回</returns>
public static object ToDbValue(object value)
{
if (value == null)
{
return DBNull.Value;
}
else
{
return value;
}//end of if
}//end of ToDbValue
/// <summary>
/// 返回数据库中所有表名
/// </summary>
/// <returns></returns>
public static List<string> GetShemaTableName()
{
using (SqlConnection conn = new SqlConnection(connStr))
{
conn.Open();
DataTable dt = conn.GetSchema("Tables");
DataView dv = new DataView(dt);
dv.RowFilter = "table_type='table'";
List<string> names = new List<string>();
foreach (DataRow item in dv.ToTable().Rows)
{
names.Add(item["Table_Name"].ToString());
Console.WriteLine(item["Table_Name"].ToString());
};
return names;
}
}
/// <summary>
/// 获得数据库某一张表的记录数
/// </summary>
/// <param name="selstr"></param>
/// <returns></returns>
public static int GetCount(string selstr)
{
using (SqlConnection conn = new SqlConnection(connStr))
{
conn.Open();
SqlDataAdapter oleda = new SqlDataAdapter(selstr, conn);
DataSet ds = new DataSet();
DataTable dt = new DataTable();
oleda.Fill(ds, "11");
dt = ds.Tables["11"];
int MaxValue = dt.Rows.Count;
return MaxValue;
} }
public static bool ExecuteScalarS(string sql, out SqlDataReader sdr, params SqlParameter[] parameters)
{
using (SqlConnection conn = new SqlConnection(connStr))
{
conn.Open();
using (SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText = sql;
cmd.Parameters.AddRange(parameters);
sdr = SqlHelper.ExecuteReader(sql);
return sdr.Read();
}//end of using
}//end of using
}//end of ExecuteScalar }
}
这一节简单地谈到了asp.net对数据的连接,如何对多个数据进行打包以实现服务器和客户端信息的交互?下回分解
基于asp.net MVC 的服务器和客户端的交互(一)的更多相关文章
- 基于asp.net MVC 的服务器和客户端的交互(三)之客户端请求响应
一.分析 WEB API 中HTTP 请求方式的四个主要方法 (GET, PUT, POST, DELETE), 按照下列方式映射为 CURD 操作: GET 用于获取 URI 资源的进行展示,GET ...
- 基于asp.net MVC 的服务器和客户端的交互(二)之获取Oauth 2.0认证权限
基本Web API的ASP.NET的Oauth2认证 增加Token额外字段 增加Scope授权字段 持久化Token 设计Token的时间间隔 刷新Token后失效老的Token 自定义验证[重启I ...
- 基于ASP.NET MVC和Bootstrap搭建响应式个人博客站(一)
1.0 为什么要做这个博客站? www.zynblog.com 在工作学习中,经常要搜索查找各种各样的资料,每次找到相关资料后都会顺手添加到浏览器书签中,时间一长,书签也就满了.而且下次再点击这个 ...
- 基于ASP.NET MVC的热插拔模块式开发框架(OrchardNoCMS)介绍(二)
基于ASP.NET MVC的热插拔模块式开发框架(OrchardNoCMS)介绍(二) 之前文章中给大家说明了下我这个小小的想法,发现还是有不少人的支持和关注.你们的鼓励是对我最大的支持. 我总结了了 ...
- 转发-基于ASP.NET MVC 4/5 Razor的模块化/插件式架构实现
基于ASP.NET MVC 4/5 Razor的模块化/插件式架构实现 概述 在日常开发中, 我们经常谈起模块化/插件化架构,这样可既可以提高开效率,又可以实现良好的扩展性,尤其对于产品化的系统有 ...
- 基于ASP.NET MVC的快速开发平台,给你的开发一个加速度!
基于ASP.NET MVC的快速开发平台,给你的开发一个加速度! bingo炸了 2017/4/6 11:07:21 阅读(37) 评论(0) 现在的人做事情都讲究效率,最好能达到事半功倍那种效果,软 ...
- 实现服务器和客户端数据交互,Java Socket有妙招
摘要:在Java SDK中,对于Socket原生提供了支持,它分为ServerSocket和Socket. 本文分享自华为云社区<Java Socket 如何实现服务器和客户端数据交互>, ...
- GPS部标平台的架构设计(十)-基于Asp.NET MVC构建GPS部标平台
在当前很多的GPS平台当中,有很多是基于asp.NET+siverlight开发的遗留项目,代码混乱而又难以维护,各种耦合和关联,要命的是界面也没见到比Javascript做的控件有多好看,随着需求的 ...
- 基于ASP.NET MVC的ABP框架入门学习教程
为什么使用ABP 我们近几年陆续开发了一些Web应用和桌面应用,需求或简单或复杂,实现或优雅或丑陋.一个基本的事实是:我们只是积累了一些经验或提高了对,NET的熟悉程度. 随着软件开发经验的不断增加, ...
随机推荐
- SSM项目spring配置文件详细步骤(分门别类、灵巧记忆)
spring-dao.xml文件 1.配置外部db.property文件: <context:property-placeholder location="classpath:jdbc ...
- 牛客网Java刷题知识点之什么是进程、什么是线程、什么是多线程、多线程的好处和弊端、多线程的创建方式、JVM中的多线程解析、多线程运行图解
不多说,直接上干货! 什么是进程? 正在进行中的程序(直译). 什么是线程? 就是进程中一个负责程序执行的控制单元(执行路径). 见 牛客网Java刷题知识点之进程和线程的区别 什么是多线程? 一个进 ...
- PHP+jQuery实现翻板抽奖(中奖概率算法)
在电视节目中有一种抽奖形式暂且叫做翻板抽奖,台上有一个墙面,墙面放置几个大方块,主持人或者抽奖者翻开对应的方块即可揭晓中奖结果.类似的抽奖形式还可以应用在WEB中,本文将使用PHP+jQuery为您讲 ...
- pat1100. Mars Numbers (20)
1100. Mars Numbers (20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue People o ...
- 设置checkbox只读
1.checkbox没有readonly属性,所以在checkbox添加readonly属性是没有作用的. <input type="checkbox" readonly=& ...
- spring 类注入失败,解决之道
1.今天偶尔发现的问题,如果你在一个类上面用了注解@Async,spring的异步注解之后,发现如果别的类用@Autowired导入这个类时会失败! 解决办法:用了@Async无非是想方便的用异步操作 ...
- Java 中的四种引用
1.强引用(Strong Reference)在 Java 中四种引用中是“最强”的,我们平时通过 new 关键字创建的对象都属于强引用,如下面的代码: Person person = new Per ...
- linux服务器tomcat启动时,不能加载项目
---恢复内容开始--- 问题描述:tomcat启动时候,能够成功启动但是项目不能加载,查看catalina.out后出现以下的错误 due to a StackOverflowError. Poss ...
- Struts2_HelloWorld_7_1
大致了解应用的运行过程: 由请求路径开始,浏览器端通过URL向tomcat发送http请求(如:http://localhost:8080/Struts2_0100_Introduction/hell ...
- Sql_Server中如何判断表中某字段是否存在
--比如说要判断表A中的字段C是否存在两个方法: 一, IF EXISTS ( SELECT 1 FROM SYSOBJECTS T1 INNER JOIN SYSCOLUMNS T2 ON T1.I ...