另一個MVC問題。MVC模型/上下文工作流程
我正在做一個Web應用程序工具,它執行了大量的數據庫請求等。而這一頁給了我很多MVC的鬥爭。
我創建了C#頁面之前,這就是它的樣子
您最多可以顯示彼此相鄰來比較值4個格。
現在MVC,我想解決這個問題是這樣的:
不過,我總是得到隨機錯誤信息通常是基於連接問題......我嘗試了很多不同的東西,所以這就是爲什麼我的代碼現在有點混亂,但這裏是最重要的部分。 (只有兩個選擇例)
VIEW
通行證MainDDL1,SubDDL1,搜索1,MainDDL2,SubDDL2,搜索2(這工作)
控制器
public PartialViewResult getGrid1(string MainDDL1, string SubDDL1, string Search1)
{
DataSearchModel voModel = new DataSearchModel();
voModel.dtResultSet1 = DLA.DataSearchContext.getResultSet1(MainDDL1, SubDDL1, Search1);
return PartialView(MainDDL1, voModel);
}
public PartialViewResult getGrid2(string MainDDL2, string SubDDL2, string Search2)
{
DataSearchModel voModel = new DataSearchModel();
voModel.dtResultSet2 = DLA.DataSearchContext.getResultSet2(MainDDL2, SubDDL2, Search2);
return PartialView(MainDDL2, voModel);
}
public ViewResult DataSearch(string text)
{
DataSearchModel oModel = new DataSearchModel();
oModel.alMainDDL = DLA.DataSearchContext.getMainDDL();
return View(oModel);
}
我真的不喜歡我必須使用dtResultSet1和dtResultSet2而不是調用相同的方法。爲什麼我不能只調用getResultSet,dtResultSet等?!由於我創建了新的模型,模型應該有它自己的方法?或者是一個模型不能與對象相比。
型號
宣言dtResultSet1,dtResultSet2,搜索字符串等
語境
public static DataTable getResultSet1(string sChoice, string sFeat, string sSearch)
{
return setResultSet1(sChoice, sFeat, sSearch);
}
private static DataTable setResultSet1(string sChoice, string sFeat, string sSearch)
{
DataTable dtTemp = new DataTable();
string sQuery = setSqlQuery(sChoice, sFeat, sSearch);
OleDbConnection dbConnection = null;
// Instantiate the Connection Object
dbConnection = new OleDbConnection(ConfigurationManager.ConnectionStrings["OracleDataBase"].ConnectionString);
//dbConnection.Open();
dbConnection.Open();
OleDbCommand dbCommand = null;
// Instantiate the Command Object
dbCommand = new OleDbCommand(sQuery, dbConnection);
dbCommand.CommandType = CommandType.Text;
OleDbDataReader dr = null;
// Execute the Stored Procedure
dr = dbCommand.ExecuteReader();
dtTemp = setResultSetRows(dtTemp, sChoice, dr);
dr.Dispose();
dbConnection.Close();
return dtTemp;
}
private static string setSqlQuery(string sChoice, string sFeat, string sSearch)
{
switch (sChoice)
{
case "T_PRCL":
case "T_PRCL_FEA":
case "T_GIS_PRCL":
return "SELECT * FROM " + sChoice + " WHERE " + sFeat + "='" + sSearch + "' and sys_del_flag = 0";
case "SGD_SFC_FEAT":
case "MSURFACE":
case "SGD_MIN_FEAT":
case "MMINERAL":
return "SELECT * FROM " + sChoice + " WHERE " + sFeat + "='" + sSearch + "' AND EXPIRY_DATE is NULL";
case "V_SURFACE":
case "V_MINERAL":
return "SELECT * FROM " + sChoice + " WHERE " + sFeat + "='" + sSearch + "'";
default:
return "SELECT sysdate as UNKNOWN_ERROR from dual";
}
}
爲2.一個方法是完全一樣的。這裏再次,我寧願將所有內容都放在一個名爲getResultSet的靜態方法中。此外,我確實有連接作爲全局變量(OleDBConnection = null等)和連接等是自己的方法。這給了我更多的隨機錯誤,只要連接重疊。通常如果一個Reader在另一個之前完成。我不明白,因爲他們是不同的模型(對象)不應該使用自己的獨立變量,對象?!
我希望有人能爲此帶來一些啓示。
你嘗試呢? (第二個答案)http://stackoverflow.com/questions/342613/connection-management-asp-net也許實現連接管理器有助於解決併發問題。 – 2012-07-06 16:19:42
這似乎解決了連接/數據讀取器問題;但是,我不斷收到一個Ajax內部服務器錯誤 – seN 2012-07-06 17:14:59
好吧,明白了。它工作正常。忘了重命名一些東西。我會馬上發佈答案。 – seN 2012-07-06 17:26:23