我使用以下语句作为参数。
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
答案 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类型,但是您在程序中询问了数字