2

语境

我的应用程序使用一个 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 { }
}

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

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

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

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

欢迎任何帮助。

谢谢,

凯文

4

2 回答 2

1

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

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

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

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

顺便说一下,一个负面因素是它确实缺乏一些高端功能,但不应该影响平均数据库工作

编辑

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

如果它有效,你最终会得到一个 .sdf 数据库

于 2012-05-30T15:09:09.263 回答
0

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

于 2012-06-08T12:02:44.200 回答