通过编程导入Ms Access数据

时间:2013-06-05 15:57:08

标签: asp.net-mvc c#-4.0 model-view-controller import ms-access-2010

我正在寻找一种从ms访问中导入数据并将其绑定到MVC模式的任何模型的好方法


以下是我们想要遵循的方法

方法1:

  • 打开Ms Access文件
  • 打开数据库
  • 打开所有表格
  • 导入所有表格的数据并将其绑定到模型
  • 关闭所有表格
  • 关闭数据库
  • 关闭文件

方法2:

  • 在Asp.Net MVC中连接Ms Access数据库
  • 打开数据库
  • 传递查询
  • 获取数据并将其绑定到模型
  • 关闭数据库

哪种方法更好,我可以如何实施?

更新 我已经实现了方法2,它的工作正常,有没有人知道如何实现方法1

5 个答案:

答案 0 :(得分:1)

这两种方法都要求您连接到数据库并将内容映射到模型中。我假设方法1是'当web应用程序开始连接并将所有数据库内容复制到内存中并从那里访问时'和方法2'是'当我需要显示一些数据时,连接数据库并复制特定内容我的模特'。

如果是这种情况,那么建议采用方法2(你已经说过你已经这样做了,所以一切都很好)。

方法1对于较小的数据库可能正常工作,但是:

  • 你放弃了数据库提供的所有[酸] [1] - 善良
  • 您坚持使用全局收集变量 - 而不是Web应用中最受欢迎的概念
  • 内存中没有不必要的整个数据库。您在网络应用程序中的慢点通常是网络,与html到达浏览器所需的时间相比,在需要时加载数据只需几毫秒

如果您尝试接近一个(不推荐,不要这样做,每次运行此代码时小猫都会受到伤害),那么最简单的方法就是在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>

(我提到过不这样做吗?)

答案 1 :(得分:1)

使用Entity Framework.Create ViewModel进行映射。

答案 2 :(得分:0)

你应该做的是根据你的桌子建立你的模型。因此,模型类应具有与表字段对应的属性。然后,当您需要模型时,您将再次查询数据库并相应地填充模型的属性。

答案 3 :(得分:0)

我不理解方法1。

是否需要使用Access?我已经看到基于文件的数据库(例如Access)存在很多问题,所以最好将所有数据从Access导入SQL Server或其他数据库,然后使用选项2.

由于您的数据库已经创建,您可以使用Entity Framework数据库优先方法来绑定它。

答案 4 :(得分:0)

您需要在Header文件中添加使用System.Data.OleDb; 并添加这些 Provider = Microsoft.ACE.OLEDB.12.0; DataSource = | DataDirectory | \ myAccessFile.mdb; Persist Security Info = False; 连接字符串中的行使用连接字符串获取
使用OleDbCommand,OleDbConnection

更新ms-access数据库

和ms-access查询就像sql查询一样