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
。不好的举动!
也许我发现的可以帮助别人不要浪费几个小时试图找出来!我希望如此!