Sql 存储过程插入截断的值

Sql 存储过程插入截断的值,sql,sql-server,Sql,Sql Server,我有一个使用多个输入参数并将它们插入Sql数据库的存储过程。有一个参数@CustomerId存在问题,它在插入数据库时被截断(但并不总是) C#: cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.AddWithValue("@CustomerId", Convert.ToInt32(customerId)); cmd.Connection = sqlConn; sqlConn.Open(); cmd.ExecuteNon

我有一个使用多个输入参数并将它们插入Sql数据库的存储过程。有一个参数@CustomerId存在问题,它在插入数据库时被截断(但并不总是)

C#:

cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@CustomerId", Convert.ToInt32(customerId));
cmd.Connection = sqlConn;
sqlConn.Open();
cmd.ExecuteNonQuery();
sqlConn.Close();
Sql SP: @客户ID int

INSERT INTO dbo.tblOffers 
(CustomerId)
VALUES
    (@CustomerId)
sql表数据类型:

CustomerId int not null
示例:564276117被截断为4276117(但它并非一直发生,并且有大于560000000的值被正确插入)
我做错了什么?谢谢

请尝试以下操作:使用
ToInt64

cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@CustomerId", Convert.ToInt64(customerId));
cmd.Connection = sqlConn;
sqlConn.Open();
cmd.ExecuteNonQuery();
sqlConn.Close();
尝试
Parameters.Add()
方法,而不是
AddWithValue

cmd.Parameters.Add("@CustomerId",SqlDbType.Int).Value=CustomerID;

Convert.ToInt32(customerId)
。。。
customerId
是否还不是
int
?如果在代码的其余部分将其视为
字符串
,那么它可能在到达这里之前就被截断了?您应该将CustomerId的字段数据类型更改为bigint。@AVD-
564276117
int
的范围内。我也考虑过bigint,但是我已经检查了int数据类型,它适合我的值范围。不,在调试模式下,“customerid”参数没有被截断,但是在生产环境中它有时被截断-在开发环境中我使用Sql Srv 2008,在生产环境中使用2005,这与此相关吗?在开发环境中它可以使用int32,调试模式他正在使用的值已经在int32的上限内。这是正常的,不确定此问题是否不会在更改的方法中重复另一个示例563280137在相同的条件下正常存储(未更改)。为什么?