【问题标题】:Save SQL DataSet to Local MDB File将 SQL 数据集保存到本地 MDB 文件
【发布时间】:2012-06-04 20:11:05
【问题描述】:

上下文

我的应用程序使用一个 SQL 数据库,它在我的应用程序启动时从该数据库中读取我的数据表。如果应用程序无法连接到 SQL DB,我有一个本地 Ms Access .MDB 文件。我有一个单独的线程来检查本地数据库是否已过时。

我有一个从我的 SQL 连接中获得的 DataTable --> 已验证并且可以正常工作 我可以在本地连接到我的 Access 数据库并从中读取 --> 已验证并正常工作

问题/问题

我正在尝试通过使用从 SQL 连接获得的 DataTable 来更新本地数据库。

public static void UpdateLocalDatabase(string strTableName, OleDbConnection MyConnection, DataTable MyTable)
{
    try
    {
        if (CreateDatabaseConnection() != null)
        {
            string strQuery = "SELECT * FROM " + strTableName;
            OleDbDataAdapter MyAdapter = new OleDbDataAdapter();
            OleDbCommandBuilder MyCommandBuilder = new OleDbCommandBuilder(MyAdapter);
            MyAdapter.SelectCommand = new OleDbCommand(strQuery, odcConnection);
            MyAdapter.UpdateCommand = MyCommandBuilder.GetUpdateCommand();
            MyConn.Open();
            MyAdapter.Update(MyTable);
            MyConn.Close();
        }
    }
    catch { }
}

如果我调试这个 sn-p,所有变量都是它们应该是的:

  • strTableName = 我的表的正确名称
  • MyConn = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=MyLocation;Persist Security Info=True;JET OLEDB:Database Password=MyPassword;"
  • MyTable = 是我的应用程序进一步使用的正确表

这个过程运行没有错误,也没有使用catch,但它没有触及我的数据库,它只是没有做任何事情。

我是在这里丢球还是只是错过了明显的东西,我不知道,但我浏览了很多文章,除了展示 MyAdapter.Update() 之外,似乎没有更多内容。

欢迎任何帮助。

谢谢,

凯文

【问题讨论】:

标签: c# sql winforms ms-access oledb


【解决方案1】:

您的备份数据库是否必须处于可访问状态?因为如果您使用 SQL Compact Edition,那么在两者之间进行复制会容易得多?

是的,这意味着将它与您的安装程序一起附加,或者只是确保所有客户端计算机都预安装了它,但是它是免费的。

如果这是一个问题,那么你需要做的就是(我认为,不是我自己做的) 将是转到您的安装程序项目属性,单击先决条件,然后勾选 SQL compact,以便在您的应用程序可以使用之前安装它,iv 之前使用其他框架完成此操作,它只是弹出一个带有安装屏蔽的框,询问是否他们想下载必要的软件,只需单击一下,就应该为他们完成。

您还需要使用紧凑型数据库吗?

顺便说一句,一个缺点是它确实缺少一些高端功能,但不应该影响平均数据库工作

编辑

如果您将使用 sql CE,您可以通过单击数据和新数据源轻松地在 VS 中创建数据库,然后按照确保在询问时放置 sql CE 的步骤操作

如果可行,您最终会得到一个 .sdf 数据库

【讨论】:

  • +1 - 好建议 - 感谢 Alex 的快速回答,我确实收到了在紧凑框架中执行此操作的建议,但这是否意味着我必须在我的安装程序中包含 SQL CE?因为目前,Ms Office 安装在所有运行该应用程序的计算机上,因此我选择了 Access。
  • 好的,我刚刚更新了我的答案,但是人们一直在说必须使用先决条件很烦人,尤其是当它要求用户点击更多时,任何软件开发人员都知道这是一个馊主意!这里有一个指南,通过将 DLL 附加到您的安装程序 erikej.blogspot.co.uk/2011/02/… 来手动完成
  • 这是我必须执行的非常基本的阅读操作,因此缺乏复杂性应该不是问题。我会看看我可以在 SQL CE 上找到什么以在我的应用程序中使用它,但仍然想知道为什么 mdb 不能工作。我会让你知道我是否可以让它与 SQL CE 一起工作 - 很多到目前为止谢谢
  • 那应该不是问题!希望提供更多帮助,但对访问知之甚少 几天前我回答了一个关于使用 sql 部署数据库的问题,如果它有任何用途 stackoverflow.com/questions/10752295/… 祝你好运!
  • 嗨亚历克斯,在尝试让它现在工作几天后,这似乎是不可能的,所以我想检查一下通过将 DLL 添加到我的应用程序来执行此操作的选项,因为我不会'不喜欢在我们域中的所有计算机上安装紧凑的框架。关于如何开始的任何想法?提前致谢。
【解决方案2】:

我在这里提供了一个代码 sn-p 来解决我的相关问题:Export SQL DataBase to WinForm DataSet and then to MDB Database using DataSet

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-13
    • 2013-02-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多