我正在尝试启动usign存储过程。好吧,我目前有一个查询只返回一个字符串的值。我似乎无法在这里看到我的错误。
sql如下:
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
Declare @ReturnVal Varchar(20)
-- Insert statements for procedure here
set @ReturnVal = (select a.AccBCPublicId from [MyTable Goes Here] a where a.AccId = @ACCId)
return @ReturnVal
END
using (SqlCommand sqlCommand = new SqlCommand("[dbo].[My Stored Procedure]", sqlConnection) { CommandType = CommandType.StoredProcedure })
{
//clean the starting 0's before sending. Originally had leading zeros
sqlCommand.Parameters.Add(new SqlParameter("@ACCId", strAccId.TrimStart(Convert.ToChar("0"))));
SqlParameter returnParam = new SqlParameter("@ReturnVal", SqlDbType.NVarChar, 20) {Direction = ParameterDirection.ReturnValue };
sqlCommand.Parameters.Add(returnParam);
sqlCommand.ExecuteNonQuery();
string bcAccount = (string)returnParam.Value;
}
我一直收到以下错误。我确实看到为什么它看作int值类型。
Conversion failed when converting the varchar value 'bc:99988' to data type int.
答案 0 :(得分:1)
使用RETURN T-SQL statement传递的值只能是整数表达式,不能传回字符串。似乎最简单的选择是使用ExecuteScalar
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
select a.AccBCPublicId from [MyTable Goes Here] a where a.AccId = @ACCId
在您的代码中使用
using (SqlCommand sqlCommand = new SqlCommand(.....))
{
sqlCommand.Parameters.Add(.....)
object result = sqlCommand.ExecuteScalar();
if(result != null)
string bcAccount = result.ToString();
....
}