我尝试检索返回值时出错

时间:2014-02-23 06:12:20

标签: c# sql-server

我尝试执行SQL Server 2008存储过程以获取返回值,我使用此代码:

 var conString = System.Configuration.ConfigurationManager.ConnectionStrings["cn"];

 string strConnString = conString.ConnectionString;

 using (SqlConnection cn = new SqlConnection(strConnString))
 using (SqlCommand cmd = cn.CreateCommand())
 {
  cmd.CommandText = "DicRegisterUser";
  cmd.CommandType = CommandType.StoredProcedure;

  cmd.Parameters.AddWithValue("@UserDeviceKey", UserDeviceKey);
  cmd.Parameters.AddWithValue("@UserFullName", UserFullName);
  cmd.Parameters.AddWithValue("@UserEmail", UserEmail);
  //cmd.Parameters.AddWithValue("@PBKey", "");

      var returnParam = new SqlParameter
  {                 
    ParameterName = "@PBKey",                   
    SqlDbType = SqlDbType.NVarChar,
    Direction = ParameterDirection.Output,
    Size = 50                            
  };                
  cmd.Parameters.Add(returnParam);

  cn.Open();
  cmd.ExecuteNonQuery();
  cn.Close();               

  return  (string)cmd.Parameters["@PBKey"].Value;
}

还有存储过程:

return a nvarchar (50)

但是我收到了这个错误:

  

其他信息:转换nvarchar时转换失败   值'669BA3A1-4172-467C-989F-1F140E9407B7'到数据类型int。

2 个答案:

答案 0 :(得分:1)

SQL Server 中的存储过程不能使用Varchar(50)值作为返回类型。存储过程始终返回INT,表示调用是否成功,或受影响的行数(INSERTDELETE,{{1语句)。

您可以将类型UPDATE的{​​{1}}参数设置为您想要的任何值(我希望您已经这样做了!),但是您不能在OUTPUT中使用VARCHAR(50)你的VARCHAR(50)陈述。

答案 1 :(得分:0)

似乎参数@UserDeviceKey被定义为将整数值作为输入但是,您将传递uniqueidentifier作为参数