c數據訪問層
⑴ 數據訪問層常見的方法有哪幾種
一、響應重定向方法
響應重定向方法是目前為止將一個網頁重定向到另一個網頁的最簡單的方法的最簡單的方法。當Web伺服器接到一個重定向請求後,它會將一個響應頭送給客戶端,這將導致客戶端發送一個新的請求到伺服器。按句話說,一個重定向請求實際上是兩個請求響應:一個是最初的請求響應,另一個是新的重定向請求響應。
在ASP.NET中實現重定向很容易。下面的代碼演示了如何使用Response.Redirect方法實現網頁重定向:
protected void Redirect_Click(object sender, EventArgs e)
{
Response.Redirect("menu.aspx");
}
要注意的是重定向請求只是一個GET請求,這就意味著我們不能從源頁中通過重定向命令提交數據。但是我們可以在重定向中使用查詢字元串來傳遞數據。如下面代碼所示:
protected void Redirect_Click(object sender, EventArgs e)
{
Response.Redirect("menu.aspx?userName=" + UserName.Text));
}
上面的例子將一個查詢字元串作為參數傳遞給了Response.Redirect方法的目標URL。我們可以通過如下的代碼獲得源數據。
protected void Page_Load(object sender, EventArgs e)
{
string userName = Request["userName"];
}
二、伺服器傳輸方法
和依賴於客戶端向另一個新頁發請求不同,伺服器傳輸是一種伺服器重定向技術,這種技術通過簡單的改變Web伺服器所處理的代碼來達到請求一個新頁的目的。當被請求頁和源頁面在同一個伺服器時,伺服器傳輸要比 Response.Redirect方法更有效,這是由於這種技術可以避免額外的開銷,僅僅使用伺服器的資源就可以進行重定向。要注意的這種技術有一個副作用,在頁面進行重定向時,客戶端的URL仍然會保持源頁面的URL,這可能會使客戶認為他們所獲得的數據是源頁面產生的。當然,在大多數情況下,這不是問題,但是這將使調試變得更困難。
Server.Transfer方法還可以保存初始頁的 HttpContext。因此,目標頁可以訪問源頁面的值。我們可以使用FormsCollection屬性來從目標頁面中獲得源頁面的值。首先,要確定我們使用了被重載的方法,這個方法有兩個參數:目標URL和一個Boolean類型的值,告訴伺服器是否保存用於描述源頁面值的Form。如下面的代碼所示:
Server.Transfer("Menu.aspx",true);
然後,我們在目標頁面中獲得一個叫txtUserName的Textbox控制項的值的代碼如下:
object obj = Request.Form["txtUserName"];
三、Response.Redirect和Server.Transfer的比較
由於Response.Redirect方法要進行兩次請求響應操作,因此,我們應該在對性能要求高的網站盡量避免使用這種方法。然而,只從技術上說,使用redirect方式確實可以從一個網頁跳到另一個網頁。相比之下,Server.Transfer會更有效率,但是跳轉的范圍僅限於同一個Web伺服器的不同網頁。從本質上說,我們可以使用 Server.Transfer來消除不必要的請求響應操作。如果我們需要重定位到不同伺服器的網頁,就需要使用Response.Redirect方法。
四、跨頁提交概述
在ASP.NET 2.0中,我們可以通過實現IbuttonControl介面提交給不同的WebForm,來實現跨網頁的提交。和Response.Redirect類似,跨網頁提交是一個基於客戶端的傳輸機制,但也有點象Server.Transfer,目標網頁也可以訪問源網頁的數據。為了使用跨網頁提交,我們需要在源網頁中的PostBackUrl屬性中指定目標URL。
五、實現跨網頁提交
這部分將討論一下如何在ASP.NET2.0中實現跨網頁提交。為了開始我們的學習,假設有兩個Web頁,一個是源Web頁,另一個是目標Web頁。在源網頁中初始化了使用按鈕進行的跨網頁提交操作。我們首先必須設置目標網頁按鈕的PostBackUrl屬性,順便說一句,所有實現了System.Web.UI.WebControls.IbuttonControl介面的Web控制項都有跨網頁提交的特性。下面的代碼將演示這一過程。
PostBackUrl="~/target.aspx" text = "Post to a target page"/>
當我們設置PostBackUrl屬性時,ASP.NET框架將相應的控制項綁定到一個新的叫WebForm_DoPostBackWithOptions的javaScript函數,產生的Html代碼如下:
onclick="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("btnSubmit", "", false, "","Target.aspx", false, false))" id="btnSubmit" />
對於上面的html代碼來說,當用戶單擊按鈕時,瀏覽器將提交目標URL(Target.aspx),而不是源URL。
六、從目標頁面中獲得源頁面控制項的值
ASP.NET2.0提供了一個叫PreviousPage的新的屬性,這個屬性無論在何時當前頁面進行跨網頁提交操作時都會指向源頁面。要注意的是,當源頁面和目標頁面在不同的應用程序中時,這個屬性包含null(這個null並不是未初始化的意思)。還有要注意的是當目標網頁訪問PreviousPage屬性時可以獲得源頁面的數據,ASP.NET運行時裝載並執行了源頁面。這將引發ProcessChildRequest事件的發生。而且,它還會引發Page_Init事件、Page_Load和任何其他的源頁面按鈕單擊事件。
因此,我們要避免由於不小心進行誤操作,所以最好通過 IsCrossPostBack屬性來確認是否為一個跨網頁提交發生,如果這個屬性值為true,那麼目標網頁就是通過一個跨網頁提交動作而調用的。如果是通過另外一種方式調用的(如一般的請求、Response.Redirect或是一個Server.Transfer),這個屬性的值為false。下面的例子演示了如何使用這個屬性。
if ( PreviousPage.IsCrossPagePostBack)
{
//執行代碼
}
//******************************************
這個PreviousPage屬性在Server.Transfer和跨網頁提交中都可以使用。在ASP.NET2.0中,我們可以在調用Server.Transfer操作後使用PreviousPage屬性在目標頁面中來獲得源頁面的數據,代碼如下:
*******************************************//
{
Server.Transfer("menu.aspx");
}
protected void Redirect_Click(object sender, EventArgs e)
//在這個接收面中我們現在可以獲得Web頁面的數據,代碼如下:
protected void Page_Load(object sender, EventArgs e)
{
if (PreviousPage != null)
{
TextBox txtBox = (TextBox)
PreviousPage.FindControl("txtUserName");
if (textBox != null)
string userName = textBox.Text;
//其他可執行的代碼
}
}
要注意的是上面的代碼必須將txtUserName控制項轉換為TextBox類型,以便可以訪問其中的值。
七、使用PreviousPageType
PreviousPageType屬性提供了在跨網頁操作中訪問源頁面的強類型能力,下面讓我們演示一下如何不通過任何類型轉換來從源頁面中獲得控制項值。代碼如下:
< asp:Textbox ID="txtUserName" Runat="server" />
< asp:Textbox ID="txtPassword" Runat="server" />
< asp:Button ID="Submit" Runat="server" Text="Login"PostBackUrl="Menu.aspx" />
要注意的是單擊按鈕可以重定向到一個叫「Menu.asp」的目標頁。這個目標頁可以使用如下的代碼獲得用戶名和密碼:
八、保存視圖狀態
對於跨網頁提交來說,ASP.NET2.0 內嵌了一個叫__POSTBACK的隱藏欄位,這個欄位包含了關於源頁面的視圖信息 -- 也就是由源頁面提供了,包含了一個帶有一個非空PostBackUrl屬性值的服務端控制項。目標頁可以使用__POSTBACK中的信息來獲得源頁面的視圖狀態信息。代碼如下:
if(PreviousPage!=null && PreviousPage.IsCrossPagePostBack &&
PreviousPage.IsValid)
{
TextBox txtBox = PreviousPage.FindControl("txtUserName");
Response.Write(txtBox.Text);
}
在上面的代碼中核對了用於確保PreviousPage屬性不為 null的檢查代碼。順便提一下,如果目標頁和源頁面不在同一個應用程序中,這個PreviousPage屬性的值為null。只有在進行跨網頁提交操作時,IsCrossPagePostBack屬性才為true。
這個跨網頁提交的特性,是ASP.NET2.0中最強有力的特性之一,這種技術將允許在一個頁面中提交到另外一個頁面,並且可以在目標頁面地無縫地操作源頁面中的數據。
⑵ 三層架構還分c/s三層和b/s三層嗎
三層架構劃分為:表現層(UI),業務邏輯層(BLL),數據訪問層(DAL).是一種開發模式.
見:http://..com/question/147437000.html.
軟體本身可以分為C/S和B/S構架
C/S結構,即Client/Server (客戶機/伺服器)
這種機構的軟體,在開發完成後,需要打包成安裝程序,用戶使用時,需要安裝客戶端才可進行管理操作.這種軟體很常見,如Word Excel等Offic軟體都是cs的軟體.
B/S結構,即Browser/Server (瀏覽器/伺服器)
這種結構的軟體,在開發完成後,需要配置伺服器,通過瀏覽器與伺服器進行數據交互. 其原理和網站差不多,這種軟體一般用戶不常見,操作和用瀏覽器上網一樣.
⑶ 數據訪問層和數據流程圖有什麼區別
數據訪問層是三層架構開發時,訪問資料庫的類;它以代碼實現。
數據流程圖是描述系統數據流程的工具,它將數據獨立抽象出來,通過圖形方式描述信息的來龍去脈和實際流程。它以圖形實現,是一種圖形化技術。
⑷ 表示層 業務邏輯層 數據訪問層怎麼理解
顧名思義,
表示層存放和前台交互的代碼,比如 servlet,用於接收數據、跳轉頁面等
業務邏輯層,存放業務邏輯相關代碼
數據訪問層,存放和資料庫交互的代碼
⑸ 三層結構中數據訪問層的主要功能是什麼
從業務規則層接收請求,從數據服務獲取數據或向其發送數據。 使用存儲過程獲取數據,並可選用 ADO.NET 向資料庫發送數據,將資料庫查詢結果返回到業務規則層,作為ADO.NET 數據集。
數據數據訪問層主要看數據層裡面有沒有包含邏輯處理,實際上各個函數主要完成各個對數據文件的操作。而不必管其他操作。業務邏輯層主要負責對數據層的操作。也就是說把一些數據層的操作進行組合。
(5)c數據訪問層擴展閱讀:
注意事項:
借鑒多種分布式資料庫訪問模式,基於Mysql開源協議,採用資料庫代理方式,形成分布式資料庫中間件解決方案,解決分布式系統資料庫分庫分表帶來的數據透明訪問難題。
在負載均衡的控制方面,通過LVS+zookeeper實現負載均衡、可設置權重實現灰度發布,通過keepalived+VIP消除單點故障隱患。
⑹ Java Web 開發時的 MVC 模型和軟體的3層架構(表現層,業務邏輯層,數據訪問層)有哪些區別和聯系
三層架構和MVC是有明顯區別的,MVC應該是展現模式(三個加起來以後才是三層架構中的UI層)
三層架構(3-tier application) 通常意義上的三層架構就是將整個業務應用劃分為:表現層(UI)、業務邏輯層(BLL)、數據訪問層(DAL)。區分層次的目的即為了「高內聚,低耦合」的思想。
1、表現層(UI):通俗講就是展現給用戶的界面,即用戶在使用一個系統的時候他的所見所得。
2、業務邏輯層(BLL):針對具體問題的操作,也可以說是對數據層的操作,對數據業務邏輯處理。
3、數據訪問層(DAL):該層所做事務直接操作資料庫,針對數據的增添、刪除、修改、更新、查找等。
MVC是 Model-View-Controller,嚴格說這三個加起來以後才是三層架構中的UI層,也就是說,MVC把三層架構中的UI層再度進行了分化,分成了控制器、視圖、實體三個部分,控制器完成頁面邏輯,通過實體來與界面層完成通話;而C層直接與三層中的BLL進行對話。
⑺ 數據訪問層的主要職責是什麼
數據訪問層:
其功能主要是負責資料庫的訪問,可以訪問資料庫系統、二進制文件、文本文檔或是XML文檔。簡單的說法就是實現對數據表的Select(查詢),Insert(插入),Update(更新),Delete(刪除)等操作。
⑻ C/S、C/S三層B/S三層、四層架構具體指什麼
以一個驗證登陸為例子
這里是界面層一般叫UIL
protected void Button1_Click(object sender, EventArgs e)
{
List<User> Users = BLL.GetUserInfo(txtUserName.Text,txtPassword.Text);
if(Users.Length > 0)
{
Response.Write("登陸成功");
}
else
{
Response.Write("登陸失敗");
}
}
以下是邏輯層代碼,業務邏輯層一般叫BLL
public static List<User> GetUserInfo(string user,string password)
{
string newPassword = GetMD5Hash(password); //這里對密碼進行加密處理,資料庫中存放的是經過MD5加密後的密,業務邏輯層一般都是處理復雜的邏輯.例如加密邏輯
List<User> Users = DAL.GetUserInfo(user,newPassword);
return Users;
}
以下是數據訪問層代碼,數據訪問層一般叫DAL
public static List<User> GetUserInfo(string user,string password)
{
List<User> Users = new List<User>();
string sql = "select * from User where Password = '"+password+"' and User = '"+user+"'"; //寫where子句的時候把Password放前面.因為Password經過加密,所以可以防止SQL注入攻擊
SqlDataAdapter da = new SqlDataAdapter(sql,"這里是資料庫連接字元串");
DataSet ds = new DataSet();
da.Fill(ds);
for(int i=0;i<ds.Tables[0].Rows.Count;i++)
{
User user = new User(ds.Tables[0].Rows[i]["ID"].ToString(),ds.Tables[0].Rows[i]["User"].ToString(),ds.Tables[0].Rows[i]["Password"].ToString());
Users.Add(user);
}
return Users;
}
還會有一個Model層.叫做模板層.是數據表結構的印射.Model層是共用層,其他三層都要用到.
比如資料庫中有張表User,裡面有3個欄位ID,User,Password
那麼在模板層中應該有一個類,資料庫中User表的一行對應一個User對象,一張表對應User對象的集合.
public class User
{
string ID;
string User;
string Password;
//重載構造函數
User(string id,string user,string password)
{
this.ID=id;
this.User=user;
this.Password=password;
}
}
⑼ C# 業務邏輯層與數據訪問層在寫代碼的時候有什麼區別理論和功能上有什麼區別請詳細說明
數據層直接訪問數據,屬於那種比較簡單而且直接的操作
邏輯層將數據層的方法組合成與業務處理流程相關的操作
這樣將數據訪問層和邏輯層分開,減少了代碼的冗餘性、增加了代碼的易管理性與可復用性
⑽ 數據訪問層
string sql = "select * from Users where UserName=@UserName and Password=@Password";
改成
string sql = "select count(*)from Users where UserName=@UserName and Password=@Password";