14

ms アクセスからデータをインポートし、それを MVC パターンの任意のモデルにバインドするための優れたアプローチを探しています


これが私たちが従うことを考えているアプローチです

アプローチ 1 :

  • Ms Accessファイルを開く
  • データベースを開く
  • すべてのテーブルを開く
  • すべてのテーブルのデータをインポートしてモデルにバインドする
  • すべてのテーブルを閉じる
  • データベースを閉じる
  • ファイルを閉じる

アプローチ 2 :

  • Asp.Net MVC で Ms Access データベースに接続する
  • データベースを開く
  • クエリを渡す
  • データを取得してモデルにバインドする
  • データベースを閉じる

どのアプローチが優れており、どのように実装できますか?

更新: 私はアプローチ 2 を実装しました。

4

5 に答える 5

1

どちらの方法でも、データベースに接続してコンテンツをモデルにマップする必要があります。アプローチ1は「Webアプリが接続を開始し、すべてのデータベースコンテンツをメモリにコピーし、そこからアクセスする場合」であり、アプローチ2は「データを表示する必要がある場合は、データベースに接続して特定のコンテンツをコピーする」であると想定しています私のモデルに」。

この場合は、アプローチ 2 が推奨されます (これを実行したと述べているので、すべて問題ありません)。

アプローチ 1 は、小規模なデータベースでは問題なく機能する可能性がありますが、次のようになります。

  • データベースが提供するすべての[酸][1]-yの良さを失います
  • グローバル コレクション変数にこだわる - Web アプリで最も愛されている概念ではない
  • データベース全体が不必要にメモリ内にある。通常、Web アプリの遅い点はネットワークです。必要なときにデータを読み込む数ミリ秒は、html がブラウザーに到達するのにかかる時間に比べれば何でもありません。

アプローチ 1 を試す場合 (お勧めしません。実行しないでください。このコードが実行されるたびに子猫が被害を受けます)、最も簡単な方法は、global.asax.cs ファイルに次のようなものを含めることです。

public class MvcApplication : System.Web.HttpApplication {

public static List<MyTable1> globalTable1;
public static List<MyTable2> globalTable2;

protected void Application_Start() {
  AreaRegistration.RegisterAllAreas();
  WebApiConfig.Register(GlobalConfiguration.Configuration);
  FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
  RouteConfig.RegisterRoutes(RouteTable.Routes);
  BundleConfig.RegisterBundles(BundleTable.Bundles);

  var DatabaseMagic = new DatabaseAccessClass("a:\path\to\database.mdb");
  globalTable1 = DatabaseMagic.getDataForTableOne();   //However you do your loading and mapping
  globalTable2 = DatabaseMagic.getDataForTableTwo();   //ditto
}

次に、コントローラーで:

    public ActionResult Index()
    {
        return View(MvcApplication.globalTable1);
    }

そしてあなたの見解:

@model List<MvcApplication1.MvcApplication.MyTable1>
@{
    ViewBag.Title = "Index";
}
<h2>Blah</h2>
<ul>
@foreach (var i in Model) {
    <li>@i.idField  - @i.contentField </li>
}
</ul>

(これをしないでくださいと言いましたか?)

于 2013-12-09T03:53:58.040 に答える
0

あなたがすべきことは、テーブルに従ってモデルを構築することです。したがって、モデル クラスには、テーブル フィールドに対応するプロパティが必要です。次に、モデルが必要な場合は、DB に対してクエリを実行し、それに応じてモデルのプロパティを入力します。

于 2013-06-11T09:39:18.150 に答える
0

アプローチ 1 がわかりませんでした。

Access を使用することは必須ですか? ファイルベースのデータベース (Access など) には多くの問題があることを確認したので、すべてのデータを Access から SQL Server またはその他のデータベースにインポートしてから、オプション 2 を使用することをお勧めします。

データベースは既に作成されているため、Entity Frameworkデータベースの最初のアプローチを使用してバインドできます。

于 2015-01-07T16:44:37.477 に答える
0

System.Data.OleDb; を使用して追加する必要があります。ヘッダー ファイルにこれらを追加し ます。 Provider=Microsoft.ACE.OLEDB.12.0;DataSource=|DataDirectory|\myAccessFile.mdb; Persist Security Info=False;
接続文字列の行OleDbCommand 、 OleDbConnection を使用して、接続文字列を取得して ms-access データベースを更新する

およびms-accessクエリは、SQLクエリと同じです

于 2015-02-14T16:21:32.453 に答える