最近比較清閒,正好利用這個時間仔細研究了一下Asp.net的多層架構,主要參考的是 Wrox 的一本<.Net WebSite Programming Problem-Design-Solution>,個人覺得這本書寫的不錯。面向有一定.net基礎的開發人員,剛開始看起來可能覺得很難懂,但是仔細研究一下會發現,這本書是一本面向工程應用的優秀參考手冊。
Asp.net的多層架構主要是為了解決數據層,邏輯層,表示層等之間的關系。我的做法是這樣的:首先建立一個DataCore的基類。基類裡面封裝了一些低層的數據庫的基本操作,比如說數據庫聯接,調用存儲過程等等。在這裡面有一個地方值得注意,通過對一個函數的重載可以實現調用不同功能的存儲過程。以下代碼示例:
protected int RunProcedure(string storedProcName, IDataParameter[] parameters, out int rowsAffected )
{
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();
}