このエラーは私を非常に混乱させました。以下に定義する2つの出力パラメーターを持つストアドプロシージャがあります
@agentNumber int OUTPUT,
@currentAgentNum int OUTPUT,
次に、以下のSELECTステートメントを使用してデータが入力されます
SELECT @agentNumber = AgentNumber
FROM AgentIdentification
WHERE AgentTaxId = @ssn
SELECT @currentAgentNum = AgentNumber
FROM UniqueAgentIdToAgentId
WHERE AgentId = @agentId
データベースでAgentNumber
は、は両方のテーブルでとして定義されていint
ます。ただし、C#コードでこのストアドプロシージャを呼び出すと、次のようなSQL例外が発生します。
データ型intからnvarcharへの変換中にエラーが発生しました。
出力パラメータのデータ型をに変更するnvarchar
と、コードは実行されますが、返されるのは整数の最初の桁だけです。以下は、C#コードで変数がどのように定義されているかです。
SqlParameter outNewAgentNumber = new SqlParameter("@agentNumber", "");//Output parameter - leave blank
SqlParameter outCurrentAgentNumber = new SqlParameter("@currentAgentNum", "");//Output parameter - leave blank
outNewAgentNumber.Direction = ParameterDirection.Output;
outCurrentAgentNumber.Direction = ParameterDirection.Output;
これらのパラメータをSqlCommand
オブジェクトに追加し、適切なデータベースを指定してからcommandType
、を使用.ExecuteNonQuery()
してプロシージャを呼び出します。繰り返しになりますが、私が本当に混乱しているのはnvarchar
、データ型として使用していることを示すエラーメッセージです。これは、(私の知る限りでは)データベース側の何かを参照しているだけです。しかし、私が言ったように、私はダブル/トリプルチェックを行い、両方のAgentNumber
列はタイプint
です。
編集
sqlParameter宣言を開始値0に変更すると、この問題は解決しました。現在、他の2つのパラメーターで同じ問題が発生しています。
SqlParameter outOperator = new SqlParameter("@operator", "");//Output parameter - leave blank
SqlParameter outDate = new SqlParameter("@date", "");//Output parameter - leave blank