编程语言
首页 > 编程语言> > c#-参数化的查询被截断并且参数丢失

c#-参数化的查询被截断并且参数丢失

作者:互联网

我有一段代码:

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());的问题所在;

解决方法:

您需要提供所有参数及其名称.
您最好使用Paramteres.AddWithValue(…).
所以:

Parameters.AddWithValue("@OwnerUserID", ...);
Parameters.AddWithValue("@BuddyUserID", ...);
Parameters.AddWithValue("@TS", ...);
Parameters.AddWithValue("@GiftID", ...);
Parameters.AddWithValue("@GiftStatus", ...);

标签:executescalar,sqlparameters,ado-net,c,sql-server
来源: https://codeday.me/bug/20191101/1982383.html