执行带OUTPUT参数(String)的存储过程得不到返回值解决方法

执行带OUTPUT参数(String)的存储过程得不到返回值
请问下各位大侠这个问题如何解决?
存储过程:
SQL code
USE [Master]
GO
/****** Object:  StoredProcedure [dbo].[Proc_Get_String]    Script Date: 03/19/2012 11:13:58 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER proc [dbo].[Proc_Get_String]
@Type nvarchar(10),
@FileName nvarchar(20) output
as 
begin
    set @FileName=@Type+'_120319001.txt'
end 

执行结果:
SQL code
declare @rtn nvarchar(20)
exec proc_get_string 'FA',@rtn output
select @rtn
返回值:FA_120319001.txt

VS2005代码:
VB.NET code
 
        Dim cmd As New SqlCommand
        Dim Conn As New SqlConnection
        Dim vFilename As String
        
        Try
            Conn.ConnectionString = ConnectionString
            Conn.Open()

            With cmd
                .CommandText = "Proc_Get_String"
                .CommandType = CommandType.StoredProcedure
                .CommandTimeout = 100
                .Connection = Conn
                .Parameters.AddWithValue("@TYPE", "FA")
                .Parameters.AddWithValue("@FILENAME", "")
                .Parameters("@FILENAME").Direction = ParameterDirection.Output
            End With

            cmd.ExecuteNonQuery()

            vFilename = cmd.Parameters("@FILENAME").Value.ToString
返回值:vFilename=""



------解决方案--------------------
看不出什么问题

我一般这么写,不好意思是C#代码
C# code

            string result=0;
            SqlConnection cn = new SqlConnection("連接字符串");
            SqlCommand cmd = new SqlCommand("Proc_Get_String",cn);
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.Add("@@FILENAME", SqlDbType.Nvarchar).Direction= ParameterDirection.Output;
            try
            {
                cn.Open();
                cmd.ExecuteNonQuery();
                result = cmd.Parameters["@@FILENAME"].Value.ToString();
            }
            finally
            {
                cn.Close();
                cn.Dispose();
                cmd.Dispose();
            }

------解决方案--------------------
指定参数的数据长度试一试

------解决方案--------------------
.Parameters.AddWithValue("@FILENAME", "")
这半句去掉试试
------解决方案--------------------
VB.NET code
With cmd
                .CommandText = "TestOutput"
                .CommandType = CommandType.StoredProcedure
                .CommandTimeout = 100
                .Connection = Conn
                .Parameters.AddWithValue("@Type", "FA")
                .Parameters.AddWithValue("@FileName", "")
                '--经过测试,要给参数定义他的size就可以了。
                .Parameters("@Type").Size = 10
                .Parameters("@FileName").Size = 20
                '--
                .Parameters("@FileName").Direction = ParameterDirection.Output
            End With

------解决方案--------------------
VB.NET code
With cmd
                .CommandText = "TestOutput"
                .CommandType = CommandType.StoredProcedure
                .CommandTimeout = 100
                .Connection = Conn
                .Parameters.AddWithValue("@Type", "FA")
                .Parameters.AddWithValue("@FileName", "")
                '--经过测试,要给参数定义他的size就可以了。
                .Parameters("@Type").Size = 10
                .Parameters("@FileName").Size = 20
                '--
                .Parameters("@FileName").Direction = ParameterDirection.Output
            End With