"nvarchar 值 '267915267915' 的转换溢出了 int 列。"



我已经广泛搜索了这个问题的解决方案(包括在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();

最新更新