当前位置: 移动技术网 > IT编程>开发语言>.net > 基于asp.net MVC 的服务器和客户端的交互(一)

基于asp.net MVC 的服务器和客户端的交互(一)

2018年09月29日  | 移动技术网IT编程  | 我要评论

再续大明时,北京圆通速递,蕾西·班哈德

三层架构

提出了一种基于asp.net开发方式的三层架构的web应用构造思想。其基本内容是:将面向对象的uml建模与web应用系统开发相结合,将整个系统分成适合asp.net开发方式的应用表示层、业务逻辑层、数据访问层和数据存储层四层结构。以此方式构造的web应用不仅达到了代码组织结构清晰明朗、高重用性、适用性,易于维护和移植的目标,而且可以提高web应用系统的开发速度。解决了目前大型web中,代码适用性、重用性差,及难于维护和移植的问题。

 

m框架

mvc 是三种 asp.net 模式中的一种。

mvc 是一种使用 mvc(model view controller 模型-视图-控制器)设计创建 web 应用程序的模式:

mvc 模式同时提供了对 html、cssjavascript 的完全控制。

model(模型)是应用程序中用于处理应用程序数据逻辑的部分。

通常模型对象负责在中存取数据。

view(视图)是应用程序中处理数据显示的部分。

通常视图是依据模型数据创建的。

controller(控制器)是应用程序中处理用户交互的部分。

通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。

mvc 分层有助于管理复杂的应用程序,因为您可以在一个时间内专门关注一个方面。例如,您可以在不依赖业务逻辑的情况下专注于视图设计。同时也让应用程序的测试更加容易。

mvc 分层同时也简化了分组开发。不同的开发人员可同时开发视图、控制器逻辑和业务逻辑。

 

客户端与服务端的交互形式

 

1

在服务器端如何去获取数据库中的数据,并且对数据进行处理?如何建立与数据库的连接?如何对多个数据进行打包以实现服务器和客户端信息的交互?

如果是手机开发就是注重客户端的部分,后台的数据和程序基本没有改变。

我们以.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对数据的连接,如何对多个数据进行打包以实现服务器和客户端信息的交互?下回分解

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网