基于asp.net MVC 的服务器和客户端的交互(一)
提出了一种基于asp.net开发方式的三层架构的web应用构造思想。其基本内容是:将面向对象的uml建模与web应用系统开发相结合,将整个系统分成适合asp.net开发方式的应用表示层、业务逻辑层、数据访问层和数据存储层四层结构。以此方式构造的web应用不仅达到了代码组织结构清晰明朗、高重用性、适用性,易于维护和移植的目标,而且可以提高web应用系统的开发速度。解决了目前大型web中,代码适用性、重用性差,及难于维护和移植的问题。
m框架
mvc 是三种 asp.net 模式中的一种。
mvc 是一种使用 mvc(model view controller 模型-视图-控制器)设计创建 web 应用程序的模式:
mvc 模式同时提供了对 html、css 和 javascript 的完全控制。
model(模型)是应用程序中用于处理应用程序数据逻辑的部分。
通常模型对象负责在中存取数据。
view(视图)是应用程序中处理数据显示的部分。
通常视图是依据模型数据创建的。
controller(控制器)是应用程序中处理用户交互的部分。
通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。
mvc 分层有助于管理复杂的应用程序,因为您可以在一个时间内专门关注一个方面。例如,您可以在不依赖业务逻辑的情况下专注于视图设计。同时也让应用程序的测试更加容易。
mvc 分层同时也简化了分组开发。不同的开发人员可同时开发视图、控制器逻辑和业务逻辑。
客户端与服务端的交互形式
在服务器端如何去获取数据库中的数据,并且对数据进行处理?如何建立与数据库的连接?如何对多个数据进行打包以实现服务器和客户端信息的交互?
我们以.net 服务端连接sql server2012为例如果是手机开发就是注重客户端的部分,后台的数据和程序基本没有改变。
“connstr”:就是我们连接数据库的字符串
当我们sql server数据库中使用sql身份认证时,
“uid”:账号 ,“pwd”:密码
//数据库连接字符串(web.config来配置),多数据库可使用dbhelpersqlp来实现. public static string connectionstring = pubconstant.connectionstring;
例如可以通过查询某一字段来判断是否存在该字段
/// /// 判断是否存在某表的某个字段 /// ///表名称 ///列名称 /// 是否存在 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 { /// /// 获取配置文件中的数据库连接字符串信息 /// private static string connstr = @"data source=csim;initial catalog=cetp;integrated security=true"; /// /// 自定义executenonquery操作 /// ///需要执行的sql语句(insert,update,delete) ///长度可变数组,存储sql语句中的变量值 /// 返回执行sql语句后数据库受到影响的行数 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 /// /// 自定义executescalar操作 /// ///需要执行的sql语句 ///长度可变数组,存储sql语句中的变量值 /// 返回执行sql语句所得数据集的第一行第一列 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 /// /// 自定义executereader操作 /// ///需要执行的sql查询语句 ///长度可变数组,存储sql语句中的变量值 /// 返回查询结果集 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 /// /// 自定义executedatatable操作,只用来执行查询结果比较小的时候 /// ///需要执行的sql查询语句 ///长度可变数组,存储sql语句中的变量值 /// 返回执行sql语句后的数据集 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 /// /// 判断从数据库里取出的值是否为null,并进行转换 /// ///从数据库里取出的值 /// 如果数据库中该值为dbnull,则转换为null后返回;否则直接返回该值 public static object fromdbvalue(object value) { if (value == dbnull.value) { return null; } else { return value; }//end of if }//end of fromdbvalue /// /// 判断将要写入数据库的值是否为null,并进行转换 /// ///将要写入数据库的值 /// 如果要写入的值为null,则将其转换成dbnull后返回;否则直接返回 public static object todbvalue(object value) { if (value == null) { return dbnull.value; } else { return value; }//end of if }//end of todbvalue /// /// 返回数据库中所有表名 /// /// public static list 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 names = new list(); foreach (datarow item in dv.totable().rows) { names.add(item["table_name"].tostring()); console.writeline(item["table_name"].tostring()); }; return names; } } /// /// 获得数据库某一张表的记录数 /// /// /// 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对数据的连接,如何对多个数据进行打包以实现服务器和客户端信息的交互?下回分解
上一篇: SQLServer存储过程实现单条件分页
推荐阅读
-
基于Asp.Net Core MVC和AdminLTE的响应式管理后台之侧边栏处理
-
asp.net mvc 简单项目框架的搭建过程(一)对Bll层和Dal层进行充分解耦
-
多线程编程学习笔记——编写一个异步的HTTP服务器和客户端
-
asp.net中ajax和一般处理程序(handler.ashx)的交互
-
基于asp.net MVC 的服务器和客户端的交互(一)
-
socket实现简单的服务器端和客户端的交互
-
服务器端和客户端通过TCP协议进行数据交互的基本应用
-
一个简单的基于TCP通信的服务器端与客户端程序
-
C#基于TCP协议的服务器端和客户端通信编程的基础教程
-
基于Asp.Net Core MVC和AdminLTE的响应式管理后台之侧边栏处理