さらに別のMVCの質問。
多くのデータベース要求などを行う Web アプリケーション ツールに取り組んでいます。そして、この 1 ページは、MVC で多くの苦労をもたらします。
以前に C# でページを作成しましたが、それがどのように見えるかです
最大 4 つのグリッドを並べて表示して、値を比較できます。
今MVCで私はこの方法で問題を解決することを考えていました:
ただし、通常は接続の問題に基づいてランダムなエラーメッセージが常に表示されます...さまざまなことを試したので、コードが混乱していますが、最も重要な部分は次のとおりです。(選択肢が2つしかない例)
見る
MainDDL1、SubDDL1、Search1、MainDDL2、SubDDL2、Search2 を渡します (これは機能します)。
コントローラ
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 と呼ばれる 1 つの静的メソッドにすべてを配置することをお勧めします。さらに、接続をグローバル変数 (OleDBConnection = null など) として使用し、接続などは独自のメソッドでした。これにより、接続が重複するたびに、さらにランダムなエラーが発生しました。通常、一方の Reader が他方の Reader の前に実行された場合。それらは異なるモデル(オブジェクト)であるため、独自の独立変数、オブジェクトを使用すべきではないので、どれがわかりませんか?
誰かがこれに光をもたらすことを願っています。