在编写SSIS包(BIDS版本2012)时,我已声明了包级别变量 strFileLocation并将其设置为String类型,并为其赋予值" C:\ Temp \ file.txt"。
在SSIS包中,我创建了一个C#脚本任务。打开脚本任务编辑器,我将strFileLocation变量声明为ReadOnlyVariable。
然后我打开了脚本编辑器并声明了这个C#变量
string strFilePath = ""
然后我写了这行代码:
strFilePath = Dts.Variables["strFileLocation"].Value;
但是这段代码不起作用,产生了这个编译错误:
无法隐式转换类型'对象'到'字符串'。存在显式转换(您是否错过了演员?)
我能够通过使用此代码解决问题:
strFilePath = Dts.Variables["strFileLocation"].Value.ToString();
似乎SSIS类型字符串与C#类型字符串不同。这与Unicode有关吗?并且我是否总是必须明确地将我的SSIS变量转换为适当的C#数据类型对应物?
答案 0 :(得分:1)
做一点研究,我相信我可以回答我自己的问题。看起来SSIS包和脚本任务代码没有以相同的方式看到变量。该变量将被视为SSIS包中的类型字符串,但同一个变量将被视为C#(或VB)脚本中的对象。
来自microsoft的网站:http://msdn.microsoft.com/en-us/library/ms135941(d=printer).aspx
脚本任务使用Dts对象的Variables属性来读取和写入包中的Variable对象。
请注意 Variable类的Value属性是Object类型。由于脚本任务已启用Option Strict,因此必须先将Value属性强制转换为适当的类型,然后才能使用它。