将SQL数据集保存到本地MDB文件

时间:2012-05-30 14:58:05

标签: c# sql winforms ms-access oledb

上下文

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

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

问题/问题

我正在尝试通过使用从SQL Connection获得的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()之外,似乎没有更多的内容。

欢迎任何帮助。

谢谢,

凯文

2 个答案:

答案 0 :(得分:1)

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

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

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

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

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

修改

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

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

答案 1 :(得分:0)

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