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