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 回答