如何使用c#修改excel工作簿中现有的SQL连接,然后刷新数据

问题描述 投票:0回答:1

我有一个 Excel 文件,它在工作簿中有 SQL 连接来从 SQL Server 获取数据,我想使用 C# 程序更新连接字符串,但我无法获取连接字符串值,也无法更新它。第一步之后,我想刷新同一连接的数据。 使用下面的代码,我可以获取连接名称,但无法找到修改它的方法,之后我可以使用更新的连接刷新数据。

    private static void RefreshTheExcelData()
    {
        Application application_PMR = new Application();

        Workbook workbook_PMR = application_PMR.Workbooks.Open(filePath);

        var workBook_Connection = workbook_PMR.Connections;

        foreach (WorkbookConnection cn in workbook_PMR.Connections)
            Console.WriteLine(cn.Name);
    }
c# sql excel vba connection-string
1个回答
1
投票

Excel 的连接信息可以存储在工作簿或连接文件中

在下面的例子中,逻辑:

  1. 打开 Excel 工作簿
  2. 获取并显示 OLEDB 连接
  3. 更新OLEDB连接;使用新服务器名称更改数据库服务器名称。
  4. 刷新数据库连接
  5. 悄悄保存工作簿
  6. 释放Excel内存资源

如何更新 Excel OLEDB 数据连接:

using System.Windows.Forms;
using Excel = Microsoft.Office.Interop.Excel;

----
Excel.Workbook myBook = null;
Excel.Application myApp = null;
Excel.WorkbookConnection wbConn = null;
string workbook = @"C:\test\Users.xlsm";
myApp = new Excel.Application();

try
{
    myBook = myApp.Workbooks.Open(workbook);
    object index = 1 as object;
    for (int i = 1; i <= myBook.Connections.Count; i++)
    {
        wbConn = myBook.Connections.Item(i);
        dynamic dbConn = wbConn.OLEDBConnection.Connection;
        // Show how the change will look like
        lblDataSource.Text = dbConn.Replace("oldDBserverName", "newDBserverName"); 
        
        dbConn = (object)lblDataSource.Text;
        // Update db connection string
        wbConn.OLEDBConnection.Connection = dbConn;
        wbConn.Refresh();
    }
    myBook.Application.DisplayAlerts = false;
    myBook.Save();

}
catch (Exception)
{
    throw;
}
finally
{
    myBook.Close(1);
    myApp.Quit();
    if (wbConn != null) Marshal.ReleaseComObject(wbConn); wbConn = null;
    if (myBook != null) Marshal.ReleaseComObject(myBook); myBook = null;
    if (myApp != null) Marshal.ReleaseComObject(myApp); myApp = null;
}

对于 OLEDB,数据库连接字符串将包含:

Provider = SQLOLEDB.1

电源查询:

Provider = Microsoft.Mashup.OleDb.1

有关连接类型的更多信息:OLEDB 和 Power Query 连接

上面的代码是我编写的完整应用程序的片段,如下所示:

显示 Excel 报表的 OLEDB 连接准备更新之前和之后的“预览”。

支持 OLEDB 和 PowerQuery 数据库连接字符串更新。

如果有兴趣,我可能会将其发布到 CodeProject.com。

© www.soinside.com 2019 - 2024. All rights reserved.