【发布时间】:2016-07-11 08:53:10
【问题描述】:
我正在使用 Excel 互操作命名空间来修改 Excel 工作簿连接中的连接字符串。
为什么当我尝试设置连接属性 (MSDN OLEDBConnection.Connection) 时会在分配的行上抛出错误?
HRESULT 异常:0x800A03EC
application = new Application();
Workbook wb = application.Workbooks.Open(file.FullName);
Sheets wbs = wb.Worksheets;
IEnumerable<Workbook> workbooks = application.Workbooks.Cast<Workbook>();
foreach (var connection in wb.Connections.Cast<WorkbookConnection>()
.Where(c => c.Type == XlConnectionType.xlConnectionTypeOLEDB))
{
connection.OLEDBConnection.Connection = "Test Connection String";
}
application.Quit();
但是,如下所示调用 Replace 方法是有效的。我发现这是一种解决方法,不确定为什么 Replace 在这种情况下有效。
application = new Application();
Workbook wb = application.Workbooks.Open(file.FullName);
Sheets wbs = wb.Worksheets;
IEnumerable<Workbook> workbooks = application.Workbooks.Cast<Workbook>();
foreach (var connection in wb.Connections.Cast<WorkbookConnection>()
.Where(c => c.Type == XlConnectionType.xlConnectionTypeOLEDB))
{
var conString = connection.OLEDBConnection.Connection.ToString();
connection.OLEDBConnection.Connection =
conString.Replace("Test Connection String", "New Test Connection String");
}
application.Quit();
这实际上是我可以更改连接字符串的唯一方法,因此询问 set 可能引发错误的原因是什么。
【问题讨论】:
-
因为
"Test Connection String" != conString.Replace("Test Connection String", "New Test Connection String")? -
谢谢,让我停下来从头开始重新访问。将很快发布答案。不过会使用 OpenXML。
标签: c# excel connection-string office-interop