将 nvarchar 转换为数据类型 int 时出错
Error converting nvarchar to data type int
当我尝试调用我网站后面的存储过程表单代码时出现此错误。我现在已经被困了很长一段时间,因为我不知道我在哪里转换或声明一个值作为整数。这是我的 SQL 声明:
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 CustomerRep=@Rep)
return @phoneID
go
然后从我后面的 c# 代码中尝试调用存储过程:
public static string GetRepPhone(string Rep)
{
字符串连接 = WebConfigurationManager.ConnectionStrings["JDC_DatabaseConnectionString"].ConnectionString;
SqlConnection sqlConnection = new 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();
}
我在我的代码中多次做同样的事情,但它们都是 return 整数,所以没有抛出任何错误,所以我知道它应该可以工作。在 cmd.ExecuteNonQuery()
行抛出错误。确切的错误是:
Conversion failed when converting the nvarchar value '(111)222-6666~29' to data type int.
我知道我无法将该字符串转换为整数,但我在代码中的任何地方都没有看到我正在声明一个整数,或者我正在尝试转换。
如有任何帮助,我们将不胜感激。谢谢
您将 RETURN
值与 OUTPUT
参数混淆了。 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;
以上代表整个过程。您不需要 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;
当我尝试调用我网站后面的存储过程表单代码时出现此错误。我现在已经被困了很长一段时间,因为我不知道我在哪里转换或声明一个值作为整数。这是我的 SQL 声明:
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 CustomerRep=@Rep)
return @phoneID
go
然后从我后面的 c# 代码中尝试调用存储过程:
public static string GetRepPhone(string Rep) { 字符串连接 = WebConfigurationManager.ConnectionStrings["JDC_DatabaseConnectionString"].ConnectionString; SqlConnection sqlConnection = new 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();
}
我在我的代码中多次做同样的事情,但它们都是 return 整数,所以没有抛出任何错误,所以我知道它应该可以工作。在 cmd.ExecuteNonQuery()
行抛出错误。确切的错误是:
Conversion failed when converting the nvarchar value '(111)222-6666~29' to data type int.
我知道我无法将该字符串转换为整数,但我在代码中的任何地方都没有看到我正在声明一个整数,或者我正在尝试转换。
如有任何帮助,我们将不胜感激。谢谢
您将 RETURN
值与 OUTPUT
参数混淆了。 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;
以上代表整个过程。您不需要 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;