I ran into this myself a couple of months ago and decided to write a short blog post about it in case you happen to run into this. SQL Server 2008 lets you use Visual Basic or C# as the scripting language in a Script Task. If you decided to translate some of your older packages from VB to C# be aware that there are some subtle differences and things don’t translate one to one.

If this is your code in Visual Basic

Visual Basic
1
2
3
4
Dim FileName As String
 FileName = (Dts.Variables("varFileName").Value).ToString()
 
 MsgBox(FileName)
Dim FileName As String
 FileName = (Dts.Variables("varFileName").Value).ToString()

 MsgBox(FileName)

And if you change it to this in C#

C#
1
2
3
4
string FileName;
FileName = (Dts.Variables("varFileName").Value).ToString();
 
MessageBox.Show(FileName);
string FileName;
FileName = (Dts.Variables("varFileName").Value).ToString();

MessageBox.Show(FileName);

You will get the following friendly error.
Non-invocable member ‘Microsoft.SqlServer.Dts.Tasks.ScriptTask.ScriptObjectModel.Variables’ cannot be used like a method.

Do you see what the error is in the code?

In C# you need to use brackets, not parentheses so instead of the top line of code, you need to use the bottom one

Dts.Variables(“varFileName”).Value
Dts.Variables[“varFileName”].Value

Here is the code block in C#

C#
1
2
3
4
string FileName;
FileName = (Dts.Variables["varFileName"].Value).ToString();
 
MessageBox.Show(FileName);
string FileName;
FileName = (Dts.Variables["varFileName"].Value).ToString();

MessageBox.Show(FileName);

*** Remember, if you have a SQL related question, try our Microsoft SQL Server Programming forum or our Microsoft SQL Server Admin forum