C# 参数和存储过程的转换不起作用

C# 参数和存储过程的转换不起作用,c#,sql,stored-procedures,C#,Sql,Stored Procedures,我正在尝试启动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

我正在尝试启动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   
结束

我一直得到以下错误。我确实明白为什么它是int值类型

Conversion failed when converting the varchar value 'bc:99988' to data type int.
随传递的值只能是整数表达式,不能传回字符串。似乎最简单的选择是使用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();
    ....
}

听起来您的
AccId
int
类型,但您提供了
bc:99988
作为字符串。请设置断点并检查TrimStart是否工作。。。。老实说,这似乎不太可能。这是我的想法,但它传递了一种不同的价值。all int.bc:值是返回的PCPublicId。是的,修剪正在工作。我刚刚又检查了一遍。AccId没有字符,只有前导零。错误所说的bc:值是我直接从SQL运行过程时返回的值。我认为ToChar转换是不正确的,如果你有一个数字必须转换成字符串,你必须使用ToString函数ToChar转换成单个字符,我想…我不知道,这就是原因。谢谢,做得很好。谢谢,现在我会记住的。
using (SqlCommand sqlCommand = new SqlCommand(.....))
{
    sqlCommand.Parameters.Add(.....)
    object result = sqlCommand.ExecuteScalar();
    if(result != null)
        string bcAccount = result.ToString();
    ....
}