我已经广泛搜索了这个问题的解决方案(包括在StackOverflow上(,但我似乎没有找到具有相同场景的解决方案。我得到的错误是:
nvarchar 值 '267915267915' 的转换溢出了 int 列。
问题是我根本没有看到我在哪里转换为 int 列。这是我的 C# 代码:
SqlCommand mothershipCommand = new SqlCommand("SELECT [ID] FROM [Order]
WHERE [OrderNumber] = @OrderNumber", mothershipConnection);
mothershipCommand.Parameters.AddWithValue("@OrderNumber", line.SONumber);
string orderID = mothershipCommand.ExecuteScalar().ToString();
一些背景信息:
- ID 是一个 int 列,但 SELECT MAX([ID]( 表示 80406 是表中最高的列。
- OrderNumber 是一个 nvarchar(450( 列。
- 线。SONumber 319279。
以字符串 orderID 开头的最后一行最初是一个 int,但在收到此错误后,我将其更改为 long,这没有帮助,所以最后我尝试将其更改为字符串以确保错误不在我这边。
我没有看到溢出发生在哪里,也不知道错误消息中的 2679... 数字来自哪里。我错过了什么吗?
代码包含:
AddWithValue("@OrderNumber", line.SONumber)
由于您没有为@OrderNumber参数指定数据类型,因此它将使用 line 中的类型。SONumber,我假设是整数。
因此,您的查询将执行为
WHERE CAST(line.SONumber AS integer) = 319279
最简单的解决方案是使用:
.Parameters.Add("@OrderNumber",SqlDbType.VarChar,30).Value=line.SONumber.ToString();