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

如何使用c#修改excel工作簿中现有的SQL连接,然后刷新数据,c#,sql,excel,vba,connection-string,C#,Sql,Excel,Vba,Connection String,我有一个Excel文件,工作簿中有SQL连接,可以从SQL Server获取数据,我想使用c#程序更新连接字符串,但我无法获取连接字符串值,也无法更新该值。在第一步之后,我想刷新相同连接的数据。 使用下面的代码,我可以获得连接名称,但我无法找到修改它的方法,之后我可以使用更新的连接刷新数据 private static void RefreshTheExcelData() { Application application_PMR = new Applicatio

我有一个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);
    }

更新Microsoft.Office.Interop.Excel。工作簿连接

下面我将用一个新的数据库服务器替换数据库服务器

这不是一个控制台应用程序,但你明白了

守则:
使用System.Windows.Forms;
使用Excel=Microsoft.Office.Interop.Excel;
----
Excel.Workbook myBook=null;
Excel.Application myApp=null;
Excel.WorkbookConnection wbConn=null;
字符串工作簿=@“C:\test\MCK VA User Level Security.xlsm”;
字符串dbTarget=cboTarget.SelectedValue.ToString();
myApp=新建Excel.Application();
尝试
{
myApp.Visible=false;
myBook=myApp.Workbooks.Open(工作簿);
对象索引=1作为对象;

对于(int i=1;i更新Microsoft.Office.Interop.Excel.工作簿连接

下面我将用一个新的数据库服务器替换数据库服务器

这不是一个控制台应用程序,但你明白了

守则:
使用System.Windows.Forms;
使用Excel=Microsoft.Office.Interop.Excel;
----
Excel.Workbook myBook=null;
Excel.Application myApp=null;
Excel.WorkbookConnection wbConn=null;
字符串工作簿=@“C:\test\MCK VA User Level Security.xlsm”;
字符串dbTarget=cboTarget.SelectedValue.ToString();
myApp=新建Excel.Application();
尝试
{
myApp.Visible=false;
myBook=myApp.Workbooks.Open(工作簿);
对象索引=1作为对象;

对于(int i=1;i您在
工作簿\u PMR.Connections
中没有获得任何值?控制台上是否显示任何内容?@ChetanRanpariya是的,在控制台中,我获得所有连接名称(我有4个连接)那么您面临的问题是什么呢?我想修改连接字符串,然后用连接刷新excel数据。在这里,我无法获取连接字符串值,也没有机会修改相同的值。您在
工作簿\u PMR.connections
中没有得到任何值吗在控制台上是吗?@ChetanRanpariya是的,在控制台中,我获取所有连接名称(我有4个连接)然后在控制台上获取它们。那么您面临的问题是什么呢?我想修改连接字符串,然后用连接刷新excel数据。在这里,我无法获取连接字符串值,也没有机会修改相同的值。
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\MCK VA User Level Security.xlsm";
string dbTarget = cboTarget.SelectedValue.ToString();
myApp = new Excel.Application();

try
{
    myApp.Visible = false;
    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;
        lblDataSource.Text = dbConn.Replace("oldDBserver", dbTarget); // display change
        dbConn = (object)lblDataSource.Text;
        wbConn.OLEDBConnection.Connection = dbConn; // Update the db connection string
    }
    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;
}