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

时间:2012-10-24 07:42:56

标签: c# .net sql-server tsql ado.net

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

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

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

  

将数据类型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

2 个答案:

答案 0 :(得分:2)

通过编辑,签名:

ALTER procedure [dbo].[addName]
        @id numeric(18,0) = 0,
        @name nchar(50)
然后问题变得清晰了:

execute addName @name

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

execute addName @name = @name

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

@name

但是,从ADO.NET开始,更好的方法是:

execute addName @name = 'Fred'

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

答案 1 :(得分:0)

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

您传入C#NVarChar类型,但是您在程序中询问了数字