C# 参数和存储过程的转换不起作用
我正在尝试启动usign存储过程。我现在有一个查询,它只返回一个字符串值。我似乎看不出我在这里做错了什么 sql语句如下所示: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
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();
....
}