将数据类型 nvarchar 转换为数值时出错

Posted

技术标签:

【中文标题】将数据类型 nvarchar 转换为数值时出错【英文标题】:Error converting data type nvarchar to numeric 【发布时间】:2012-10-14 05:35:29 【问题描述】:

我使用以下语句作为参数。

comm.Parameters.Add("@name", SqlDbType.NVarChar, 50).Value = txtname.Text;

Name 是 SQL Server nvarchar 列,但我收到此错误:

我的sql:

SqlCommand comm = conn.CreateCommand();
comm.CommandText = "execute addName @name";
comm.Parameters.Add("@name", SqlDbType.NVarChar, 50).Value = txtname.Text;

conn.Open();
comm.ExecuteNonQuery();
conn.Close();

可以帮我解决这个问题吗? 我的店铺流程:

USE [info]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER procedure [dbo].[addName]
            @id numeric(18,0) = 0,
            @name nchar(50)
as
if (select name from TName where name = @name) is null
begin
select @id =  MAX(id)+1 from TName
insert into TName
values (@id, @name)
print @id
end
else
begin
print 'Eroare'
end

【问题讨论】:

也许这可以帮助你 [***.com/questions/11014322/… [1]: ***.com/questions/11014322/… addName 是做什么的?看起来addName 有一个数字参数,而您正试图给它一个不能转换为数字的 nvarchar。 @MMK 这有什么帮助? addName 的签名是什么?存储过程中@name 的类型是什么?这个错误是否会发生在存储过程中,因为仅仅是一个错误? @Asif 查看问题:“Name is a SQL Server nvarchar column”。然而,我想重要的问题是:@name 参数的数据类型是什么 【参考方案1】:

您必须在addName 过程中修改参数name 的类型,并设置为NVarChar

你传入了 C# NVarChar 类型,但你有数字在程序中被问到

【讨论】:

谢谢,在过程中我有 @id numeric(18,0) = 0@name nvarchar(50),我放置了 @name首先,它的工作原理 @Igor 有效,但出于所有错误的原因。它还将破坏任何其他使用addName by-order 的代码。我真的认为您应该在这里按名称传递,而不是按位置传递。改变参数的顺序来解决这个尖叫声:“我做错了”,IMO。【参考方案2】:

有编辑,有签名:

ALTER procedure [dbo].[addName]
        @id numeric(18,0) = 0,
        @name nchar(50)

那么问题就清楚了:

execute addName @name

是按位置传递的 - 因此您将 @name 的值传递给 @id 参数。如果您是从 TSQL 调用它,则需要使用传递名称:

execute addName @name = @name

第一个(左)表示参数名称,第二个(右)表示用于此参数的值;例如,将文字传递给addName@name 参数:

execute addName @name = 'Fred'

但是,在 ADO.NET 中,更好的方法是:

comm.CommandText = "addName";
comm.CommandType = CommandType.StoredProcedure;

使用 pass-by-name 自动将其视为 SP-exec。

【讨论】:

以上是关于将数据类型 nvarchar 转换为数值时出错的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server:将数据类型 nvarchar 转换为数字时出错

将数据类型 int 转换为 nvarchar 时出错

将数据类型 NVarchar 转换为 int 时出错

特定列 -- 将数据类型 nvarchar 转换为 bigint 时出错

将 nvarchar 转换为数据类型 int 时出错

调用存储过程,提示:从数据类型 nvarchar 转换为 float 时出错。 请问哪里的错?(不好意思没分了)