3

私はコードを持っています:

command.Parameters.Clear();
command.Parameters.Add(ownerUserIDParam);
command.Parameters.Add(buddyUserIDParam);
command.Parameters.Add(timestampParam);
command.Parameters.Add(new SqlParameter("@GiftID", giftID));
command.Parameters.Add(new SqlParameter("@GiftStatus", (byte)GiftStatusEnum.wait));
command.CommandText = "INSERT INTO SentGefts (OwnerUserID, BuddyUserID, CreateTS, GiftID, Status, AcceptRejectTS, ParentEntityType, ParentEntityID) VALUES (@OwnerUserID, @BuddyUserID, @TS, @GiftID, @GiftStatus, @TS, 0 ,0);";
command.CommandText += "SELECT @@IDENTITY;";
result.GiftInstanceID = long.Parse(command.ExecuteScalar().ToString());

そして、私は受け取ります:パラメーター化されたクエリ'(@OwnerUserID int、@BuddyUserID int、@ TS datetime、@ GiftID int、@ Gif'は、提供されなかったパラメーター'@GiftStatus'を予期します。

注:'(@OwnerUserID int、@BuddyUserID int、@ TS datetime、@ GiftID int、@ Gif'は切り捨てられ、正確に64シンボルです...そして、未完成のパラメーター名' Gif'で終了します(例外はこのパラメータについても)。

パラメータが表示されないのはなぜですか?

UPD:最後のパラメーター(@GiftStatus)を次のように追加する場合:command.Parameters.AddWithValue( "@ GiftStatus"、(byte)GiftStatusEnum.wait);

このようにして物事は機能し始めます。しかし、.Add(new SqlParamter());の何が問題になっているのか理解できません。

4

2 に答える 2

3

名前とともにすべてのパラメーターを指定する必要があります。
を使用したほうがいいですParamteres.AddWithValue(...)。それで:

Parameters.AddWithValue("@OwnerUserID", ...);
Parameters.AddWithValue("@BuddyUserID", ...);
Parameters.AddWithValue("@TS", ...);
Parameters.AddWithValue("@GiftID", ...);
Parameters.AddWithValue("@GiftStatus", ...);
于 2012-05-29T13:34:08.537 に答える
1

ExecuteScalar()の前に次のコマンドが欠落していると思います

command.CommandText += "SELECT @@IDENTITY;";
command.CommandType = CommandType.Text;
result.GiftInstanceID = long.Parse(command.ExecuteScalar().ToString());
于 2012-05-29T13:37:10.293 に答える