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

最初 (左) はパラメーター名を示し、2 番目 (右) はこのパラメーターに使用する値を示します。たとえば、リテラルをaddName@nameパラメータに渡すには:

execute addName @name = 'Fred'

ただし、ADO.NET からのより良いアプローチは次のとおりです。

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

これは、名前渡しを使用して自動的に SP-exec として扱います。

于 2012-10-24T08:04:45.553 に答える
0

プロシージャでパラメータのタイプを変更し、次のように設定する必要がありますnameaddNameNVarChar

C# NVarChar 型を渡しますが、手順で尋ねられる数値があります

于 2012-10-24T07:48:11.823 に答える