欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-07-05 21:57:26
三层架构 提出了一种基于asp.net开发方式的三层架构的web应用构造思想。其基本内容是:将面向对象的uml建模与web应用系统开发相结合,将整个系统分成适合asp.net开发方式的应用表示层、业...
三层架构

提出了一种基于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 分层同时也简化了分组开发。不同的开发人员可同时开发视图、控制器逻辑和业务逻辑。

 

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

 

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