【发布时间】:2016-09-02 19:18:25
【问题描述】:
我收到以下代码的错误。我将本地 ID 传递为“113332,113347”
cn.Open();
SqlCommand cmd = new SqlCommand("SelectUser", cn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@in_UserId", SqlDbType.Int).Value = Convert.ToInt32(userId);
cmd.Parameters.Add("@in_StartDate", SqlDbType.DateTime).Value = fromDate;
cmd.Parameters.Add("@in_EndDate", SqlDbType.DateTime).Value = toDate;
cmd.Parameters.Add("@in_LocalIds", SqlDbType.NVarChar, 100).Value = localids.ToString();
cmd.ExecuteNonQuery();
“将 nvarchar 值 '113332,113347' 转换为数据类型 int 时转换失败。”
在数据库中,本地id的数据类型是int。
存储过程代码如下
CREATE PROCEDURE [dbo].[User_Update] @in_UserId INT
,@in_StartDate DATETIME
,@in_EndDate DATETIME
,@in_LocalIds NVARCHAR(100)
AS
BEGIN
SELECT * FROM TABLE1 WHERE LocalId in (@in_LocalIds) AND UserId = @in_UserId
END
go
【问题讨论】:
-
那么当它失败时,
userId中的内容是什么?看起来它不是一个 int。 -
你能发布存储过程吗?还有你的代码中的
localids是什么类型? -
听起来你有一个错误,并且你将相同的字符串值“113332,113347”分配给
localids和userid -
这不是错误,您不能像这样参数化查询的
IN()部分。