【发布时间】:2020-01-11 08:30:13
【问题描述】:
我已经广泛搜索了这个问题的解决方案(包括在 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) 列。
- line.SONumber 是 319279。
最后一行以字符串 orderID 开头的原来是一个 int,但是在收到这个错误之后我把它改成了一个 long,这并没有帮助,所以最后我试着把它改成一个字符串,以确保错误是不是在我这边。
我没有看到溢出发生在哪里,我也不知道错误消息中的 2679... 数字来自哪里。我有什么遗漏吗?
【问题讨论】:
-
不要使用
AddWithValue(它是evil)。推断@OrderNumber应该是字符串时是整数。 -
将 SQL Profiler 附加到数据库并观察在线发送的查询可能会显示之前的两个 cmets 都是正确的。
-
如果
OrderNumber是一个数字,那么使用数字数据类型而不是 900 字节的字符串不是更有意义,因为您无法轻松索引?
标签: c# sql sql-server