public string GetProcedureReturnString(string strProcedureName,string strParameterName,string strParameterText)
{
/* 编写:
* 功能:得到只有一个参数的存储过程的返回值(存储过程返回值类型为 String)
* 参数:string 存储过程名称,string 存储过程参数名称,string 存储过程参数值
* 返回值:string 存储过程的返回值
*/
SqlCommand cmdTemp;
SqlParameter spTemp;
string strI;
try
{
PubClass.OpenDataBase();//打开连接

cmdTemp=new SqlCommand(strProcedureName,PubClass.conn);
cmdTemp.CommandType=CommandType.StoredProcedure;
cmdTemp.Parameters.Add (strParameterName,strParameterText);
cmdTemp.Parameters.Add("@VChar",SqlDbType.VarChar,10);
cmdTemp.Parameters["@VChar"].Direction = ParameterDirection.Output; cmdTemp.ExecuteNonQuery();//在这报错?怎么改都报错.                  strI=cmdTemp.Parameters["@VChar"].Value.ToString();
cmdTemp.Dispose();
PubClass.CloseDataBase();//关闭连接
return strI;
}
catch(Exception E)
{
string strTemp;
strTemp=E.Message;//strTemp="将 varchar 值 'EQ140' 转换为数据类型为 int 的列时发生语法错误。";
PubClass.CloseDataBase();//关闭连接
return "";
}
}
//错误信息:"将 varchar 值 'EQ140' 转换为数据类型为 int 的列时发生语法错误。"EQ140是该存储过程的返回值.
返回的值只要带了 字母,汉字就会报错(整数就不会错),ExecuteNonQuery方法返回的是int,ExecuteReader和ExecuteScalar也不行.办了两个小时,没解决!各位:帮帮忙!

解决方案 »

  1.   

    RETURN
    从查询或过程中无条件退出。RETURN 即时且完全,可在任何时候用于从过程、批处理或语句块中退出。不执行位于 RETURN 之后的语句。语法
    RETURN [ integer_expression ]参数
    integer_expression是返回的整型值。存储过程可以给调用过程或应用程序返回整型值。返回类型
    可以选择是否返回 int。说明  除非特别指明,所有系统存储过程返回 0 值表示成功,返回非零值则表示失败。
    注释
    当用于存储过程时,RETURN 不能返回空值。如果过程试图返回空值(例如,使用 RETURN @status 且 @status 是 NULL),将生成警告信息并返回 0 值。在执行当前过程的批处理或过程内,可以在后续 Transact-SQL 语句中包含返回状态值,但必须以下列格式输入若想返回字符之类的,用output吧。
      

  2.   

    你所定义的参数是一个输出参数,而cmdTemp.ExecuteNonQuery();执行结果输出的参数默认为sql影响的行数,因此如果需要将单个结果输出,使用cmdTemp.ExecuteScalar().ToString()即可;
    把你的sql贴出来看看。
      

  3.   

    CREATE Procedure GetDepID
    (
    @UserName varchar(20),
    @VChar varchar(10) OUTPUT 
    )AS
    SELECT @VChar=(select 部门编号 from V_UserEmp 
          where 用户名 =@UserName)
    RETURN (@VChar)
    GO
      

  4.   

    to:drone(雄蜂)
    改成cmdTemp.ExecuteScalar().ToString()报相同的错误!
      

  5.   

    你把 CREATE Procedure GetDepID
    (
    @UserName varchar(20),
    @VChar varchar(10) OUTPUT 
    )AS
    SELECT @VChar=(select 部门编号 from V_UserEmp 
          where 用户名 =@UserName)
    RETURN (@VChar)  //这行去掉试试
    GO
      

  6.   

    把 RETURN (@VChar) 去掉试试
      

  7.   

    to: boytomato(深爱一人叫颖的女孩!) 
    按你的方法搞定!结帐.