我尝试执行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。
答案 0 :(得分:1)
SQL Server 中的存储过程不能使用Varchar(50)
值作为返回类型。存储过程始终返回INT
,表示调用是否成功,或受影响的行数(INSERT
,DELETE
,{{1语句)。
您可以将类型UPDATE
的{{1}}参数设置为您想要的任何值(我希望您已经这样做了!),但是您不能在OUTPUT
中使用VARCHAR(50)
你的VARCHAR(50)
陈述。
答案 1 :(得分:0)
似乎参数@UserDeviceKey被定义为将整数值作为输入但是,您将传递uniqueidentifier作为参数