基於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對數據的連接,如何對多個數據進行打包以實現服務器和客戶端信息的交互?下回分解


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM