0

こんにちは、ストアド プロシージャで出力パラメータを定義しています。sp は次のとおりです。

createproc [dbo].[convertempID](@empid int,@totcnt varchar(4) output)
as
begin
    select @totcnt = right('00000'+convert(varchar(6), empID), 4)
        from tblEmployee
        where empID = @empid;
end

これを実行すると結果が得られます0015@totcnt、C#コードでこれを呼び出すと、どこが間違っているかを誰かが知る15代わりに得られます0015

cmd.CommandText = "convertempID";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@empid", 15);
cmd.Parameters.Add(new SqlParameter("@totcnt", SqlDbType.Int));
cmd.Parameters["@totcnt"].Direction = ParameterDirection.Output;
cmd.ExecuteNonQuery();
sring ans = cmd.Parameters["@totcnt"].Value.ToString();
4

4 に答える 4

4

これが問題です:

cmd.Parameters.Add(new SqlParameter("@totcnt", SqlDbType.Int));

それをストアド プロシージャの宣言と比較します。

@totcnt varchar(4) output

パラメータタイプをに変更するSqlDbType.VarCharと、機能するはずです。現時点では、値は実際には文字列「0015」ではなく整数の 15 になります。

于 2013-02-22T12:51:20.270 に答える
1

戻り値の型は type と一致する必要があります:

交換してみる

 cmd.Parameters.Add(new SqlParameter("@totcnt", SqlDbType.Int));

 cmd.Parameters.Add(new SqlParameter("@totcnt", SqlDbType.VarChar));
于 2013-02-22T12:53:06.680 に答える
1

パラメータ タイプを として指定しましたが、とforIntの間に違いはありません。パラメータ行を次のように変更します。001515Int

cmd.Parameters.Add(new SqlParameter("@totcnt", SqlDbType.VarChar));
于 2013-02-22T12:51:44.150 に答える
0

totcnt型をintからvarcharに変更します

于 2013-02-22T12:56:45.170 に答える