1

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

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

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

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

2 回答 2

2

通过编辑,签名:

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

那么问题就很清楚了:

execute addName @name

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

execute addName @name = @name

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

execute addName @name = 'Fred'

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

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

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

于 2012-10-24T08:04:45.553 回答
0

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

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

于 2012-10-24T07:48:11.823 回答