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

