Asp.net的多層架構主要是爲了解決數據層,邏輯層,表示層等之間的關係
{
int result;
Connection.Open();
SqlCommand command = BuildIntCommand( storedProcName, parameters );
rowsAffected = command.ExecuteNonQuery();
result = (int)command.Parameters["ReturnValue"].Value;
Connection.Close();
return result;
}
protected SqlDataReader RunProcedure(string storedProcName, IDataParameter[] parameters )
{
SqlDataReader returnReader;
Connection.Open();
SqlCommand command = BuildQueryCommand( storedProcName, parameters );
command.CommandType = CommandType.StoredProcedure;
returnReader = command.ExecuteReader();
//Connection.Close();
return returnReader;
}
protected DataSet RunProcedure(string storedProcName, IDataParameter[] parameters, string tableName )
{
DataSet dataSet = new DataSet();
Connection.Open();
SqlDataAdapter sqlDA = new SqlDataAdapter();
sqlDA.SelectCommand = BuildQueryCommand( storedProcName, parameters );
sqlDA.Fill( dataSet, tableName );
Connection.Close();
return dataSet;
}
protected void RunProcedure(string storedProcName, IDataParameter[] parameters, DataSet dataSet, string tableName )
{
Connection.Open();
SqlDataAdapter sqlDA = new SqlDataAdapter();
sqlDA.SelectCommand = BuildIntCommand( storedProcName, parameters );
sqlDA.Fill( dataSet, tableName );
Connection.Close();
}
最後是表示層,表示層的功能就是完成頁面邏輯。主要是接受客戶端數據然後經過簡單整合和判斷,傳遞給邏輯層處理。同樣,接收邏輯層傳遞來的Dataset或DataReader,表示在前臺頁面。
數據在各個層次之間的關係相對獨立,但是又相對連續。
獨立性:
對於表示層之外的幾個層,都可以把單個的對象或是方法直接拿出來放到其他工程中。因爲每個曾都是爲了實現模型中獨立的功能而完成的。因爲在類似工程中的應用基本上不用太大改動,特別是一些相對更加原始的層,在這個示例中的DataCore就是一個典型的例子。
連續性:
數據在傳遞過程中有較強的連續性。舉一個例子,在表示層中有這樣一個根據Session中Userid返回一個Dataset,原本我是這樣寫的:
表示層:
{
SqlParameter[] parameters ={new SqlParameter("@UserID",SqlDbType.Int,4)};
parameters[0].Value = UserID;
using(DataSet UserInfor = RunProcedure("GetUserInfor",parameters,"UserInfor"))
{
return UserInfor;
}
}
對於這個問題的解決方案有兩種,無非是更改表示層還是更改邏輯層。更改邏輯層,就要改成
SqlParameter[] parameters ={new SqlParameter("@UserID",SqlDbType.Int,32)}; |
DataSet UserInforRow = ObjectUser.GetUserInfor(int.Parse(Session["UserId"].ToString())); |
其他類似的變量傳遞和引用也遇到類似問題,雖然幾個層次相對獨立,但是在數據的傳遞上也相對連續。