错误转换nvarchar的数据类型为int
问题描述:
当我尝试背后叫我的存储过程的代码的形式在我的网站,我得到这个错误。我一直停留相当长的一段时间了,因为我不知道的任何地方我转换或声明的值作为整数做。这是我的SQL语句:错误转换nvarchar的数据类型为int
create procedure GetRepPhoneID
@Rep nvarchar(100),
@phoneID nvarchar(100) output
as
set @phoneID = (select concat(CustomerRepPh, '~', cast(RepID as nvarchar(100))) as 'PhoneAndID'
from Reps
where [email protected])
return @phoneID
go
从我的C#代码
那么后面我试图调用存储过程:
公共静态字符串GetRepPhone(字符串众议员) { 字符串连接= WebConfigurationManager.ConnectionStrings [ “JDC_DatabaseConnectionString”]的ConnectionString。 的SqlConnection的SqlConnection =新的SqlConnection(连接);
//This funciton will take all of the values and create them.
try
{
sqlConnection.Open();
}
catch (Exception err)
{
Console.WriteLine(err.Message);
}
SqlCommand cmd = new SqlCommand();
cmd.Connection = sqlConnection;
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "GetRepPhoneID"; //getting the procedure created in SQL.
SqlParameter CustomerParam = new SqlParameter();
CustomerParam.ParameterName = "Rep";
CustomerParam.SqlDbType = SqlDbType.NVarChar;
CustomerParam.Value = Rep;
CustomerParam.Direction = ParameterDirection.Input;
//We are using an output parameter not a return one because it is a string.
SqlParameter ReturnParam = new SqlParameter("phoneID", SqlDbType.NVarChar, 100);
ReturnParam.Direction = ParameterDirection.Output;
cmd.Parameters.Add(CustomerParam);
cmd.Parameters.Add(ReturnParam);
cmd.ExecuteNonQuery();
sqlConnection.Close();
return ReturnParam.Value.ToString();
}
我做同样的事情多次在我的代码,但他们都返回整数所以一直没有异常,所以我知道它应该工作的错误。错误正在cmd.ExecuteNonQuery()
行中引发。确切的错误是:
Conversion failed when converting the nvarchar value '(111)222-6666~29' to data type int.
我明白,我不能说字符串转换为整数,但我不认为在我的代码的任何地方,我宣布一个整数,或者我试图转换。
任何帮助将不胜感激。谢谢。
答
你是一个OUTPUT
参数混淆一个RETURN
值。 RETURN是类型INT
的可选状态码。将另一个参数声明为OUTPUT。
意义,这是在存储过程中无效:
return @phoneID
相反,加@phoneID nvarchar(100) OUTPUT
参数列表并删除DECLARE @PhoneID
:
CREATE PROCEDURE GetRepPhoneID
(
@Rep NVARCHAR(100),
@phoneID NVARCHAR(100) OUTPUT
)
AS
SET NOCOUNT ON;
SELECT @phoneID = concat(CustomerRepPh, '~', RepID)
FROM Reps
WHERE CustomerRep = @Rep;
上述表示整个 PROC。你不需要RETURN
或SET
。
然后在C#代码,您需要更改参数是如何规定:
SqlParameter ReturnParam = new SqlParameter("phoneID", SqlDbType.NVarChar, 100);
ReturnParam.Direction = ParameterDirection.Output;
然后删除此行,因为它没有必要的,因为该参数的值将保持连接关闭后:
string PhoneAndID = cmd.Parameters[1].Value.ToString();
并更改return
是:
return ReturnParam.Value.ToString();
拉斯维加斯您可能需要更新输入参数的声明,如下所示:
SqlParameter CustomerParam = new SqlParameter("Rep", SqlDbType.NVarChar, 100);
CustomerParam.Value = Rep;
CustomerParam.Direction = ParameterDirection.Input;
感谢您的帮助。这摆脱了原来的错误,但现在是抛出'字符串[1]:Size属性有0.' – 2015-01-15 17:20:37
@ChaseErnst我刚才编辑与帕拉姆声明C#部分的大小无效。 – 2015-01-15 17:23:22
这使我回到原来的错误。我已将问题更新到我当前的代码。 – 2015-01-15 17:26:58