SqlConnectionStringBuilder不喜欢其中的Provider

时间:2018-03-06 20:23:28

标签: c# excel ssis

SqlConnectionStringBuilder不喜欢Provider

我与此争吵了一段时间,直到我想到,尝试使用SqlConnectionStringBuilder一个没有提供者部分的连接字符串并且它有效。我找不到任何关于这个问题的帮助,所以我想发布它。我会以另一种方式这样做,因为我知道它可能无法工作。

这是调试器的连接字符串:

Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\Src\\MyTest.xls;Extended Properties=\"EXCEL 8.0;HDR=YES;IMEX=1\";

这是一个在我的Windows窗体应用程序中运行的SSIS包中创建的有效连接字符串,因此我知道它是正确的。

以下是我在下面尝试的结果:

尝试#1:

SqlConnectionStringBuilder sb = new SqlConnectionStringBuilder(cnExcel.ConnectionString);

这会引发错误:

  

'new SqlConnectionStringBuilder(cnExcel.ConnectionString)'引发了类型'System.ArgumentException'的异常

尝试#2:我也试过了:

SqlConnectionStringBuilder sb = new SqlConnectionStringBuilder();
sb.ConnectionString = cnExcel.ConnectionString;

尝试设置sb.ConnectionString时收到完全相同的错误消息。

可能存在一条内部错误消息,该错误消息未在调试器的监视窗口中显示或在其爆炸时显示。

但是当我将代码放入try / catch时,会返回正确的错误:

string excelConnectionName = "Excel Connection Manager";Microsoft.SqlServer.Dts.Runtime.ConnectionManager cnExcel = SSISFct.GetExcelConnection(pkg, excelConnectionName, "EXCEL");

if (cnExcel == null) 
    throw new Exception("[***]: Missing Excel Connection for Connection Name: " + excelConnectionName);

SqlConnectionStringBuilder sb = new SqlConnectionStringBuilder(); //new SqlConnectionStringBuilder(cnExcel.ConnectionString);

try
{
    sb.ConnectionString = cnExcel.ConnectionString;
    sb.DataSource = excelFileName;
    cnExcel.ConnectionString = sb.ConnectionString;
}
catch (Exception ex)
{
    int i = 1; //Junk code to set a break point at.
}

现在它在调试器监视窗口中返回:

ex  {"Keyword not supported: 'provider'."}  
System.Exception {System.ArgumentException}

显然我不能使用SqlConnectionStringBuilder为Excel SSIS连接字符串构建连接字符串。

现在想到“Duhh”这个词!我不应该为此目的使用SqlConnectionStringBuilder,因为它不是SqlDataSource。不好的举动!

也许我发现的可以帮助别人不要浪费几个小时试图找出来!我希望如此!

0 个答案:

没有答案