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

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

    1

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

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

    我们以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对数据的连接,如何对多个数据进行打包以实现服务器和客户端信息的交互?下回分解
  • 相关阅读:
    第1章 1.4计算机网络概述--数据包和数据帧
    第1章 1.3计算机网络概述--规划IP地址介绍MAC地址
    sql生成随机字符串
    bootstrap手风琴效果
    C#-java RSA加密解密
    正则表达式验证手机号 身份证号 银行卡号 姓名输入
    微服务在微信后台的架构实践
    react学习
    datatables .fnDraw is not a function
    给当前页或者跳转后页面的导航栏添加选中样式
  • 原文地址:https://www.cnblogs.com/fuGuy/p/5646786.html
Copyright © 2020-2023  润新知