架構思想
三層架構
提出了一種基於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 分層同時也簡化了分組開發。不同的開發人員可同時開發視圖、控制器邏輯和業務邏輯。
客戶端與服務端的交互形式
在服務器端如何去獲取數據庫中的數據,並且對數據進行處理?如何建立與數據庫的連接?如何對多個數據進行打包以實現服務器和客戶端信息的交互?
如果是手機開發就是注重客戶端的部分,后台的數據和程序基本沒有改變。
我們以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對數據的連接,如何對多個數據進行打包以實現服務器和客戶端信息的交互?下回分解