我尝试执行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。
SQL Server 中的存储过程不能使用Varchar(50)
值作为其返回类型。存储过程始终返回一个INT
,指示调用是否成功,或者受影响的行数(对于 INSERT
、DELETE
、 UPDATE
语句)。
您可以将类型 VARCHAR(50)
的 OUTPUT
参数设置为您想要的任何值(我希望您已经在这样做了!),但您不能在 RETURN ...
语句中使用该VARCHAR(50)
。
@UserDeviceKey被定义为将整数值作为输入,但是,您正在传递唯一标识符作为参数