【问题标题】:Import Ms Access Data by programmming通过编程导入 Ms Access 数据
【发布时间】:2013-06-01 10:12:47
【问题描述】:

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


这是我们正在考虑遵循的方法

方法一:

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

方法二:

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

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

更新: 我已经实现了方法 2 并且效果很好,有人知道如何实现方法 1

【问题讨论】:

  • 我会采用第二种方法,“我如何实现它”取决于你。你绝对可以在谷歌上找到一些信息。尝试一些东西,如果发生任何错误或卡在某个地方,然后发布问题。那么人们可能更愿意帮助你。
  • 当您说“导入数据”时 - 您要将其导入到什么位置?不同的数据库?
  • @StanK 使用上述上下文导入数据的方法1是从Access数据库中复制所有数据并将其绑定到Model [ASP.NET MVC架构]
  • 您需要一个集中式数据库(可能嵌入一个 SQL Compact 数据库?)然后您可以将您的模型绑定到该数据库,并运行从 Access-to-CompactSQL 的导入过程。然后你会刷新你的模型并使用它。

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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    如果是这种情况,那么建议使用方法 2(并且您已经声明您已经这样做了,所以一切都很好)。

    方法 1 可能适用于较小的数据库,但是:

    • 您失去了数据库提供的所有 [acid][1]-y 优点
    • 您坚持使用全局集合变量 - 这不是网络应用程序中最受欢迎的概念
    • 您有一个不必要的整个数据库在内存中。您在网络应用程序中的慢点通常是网络,与您的 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>
    

    (我有没有提到不要这样做?)

    【讨论】:

      【解决方案3】:

      我不理解方法 1。

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

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

      【讨论】:

        【解决方案4】:

        使用 Entity Framework.Create ViewModel 来映射。

        【讨论】:

          【解决方案5】:

          需要在头文件中添加using System.Data.OleDb; 并添加这些 Provider=Microsoft.ACE.OLEDB.12.0;DataSource=|DataDirectory|\myAccessFile.mdb; Persist Security Info=False; 连接字符串中的行使用连接字符串提取
          使用 OleDbCommand 更新 ms-access 数据库,OleDbConnection

          和 ms-access 查询就像 sql 查询

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2018-08-02
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-10-17
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多