如何解决ExecuteScalar函数失败必须声明标量变量“ @DeviceId”
我有一个接收对象列表的控制器。首先,它使用ExecuteScalar检查表中是否已存在这些对象中的任何一个。如果行已存在,则运行更新存储过程。如果没有,我们运行插入存储过程。但是,我的代码在Execute Scalar函数执行失败,该函数告诉我们“必须声明标量变量@deviceid”。我不确定错误消息是引用查询还是sql参数。
public BaseResponse Post([FromBody]List<PendingAttachment> pendingAttachmentRequest)
{
PendingAttachment pendingAttachment = new PendingAttachment();
List<sqlParameter> sqlParameters = new List<sqlParameter>()
{
new sqlParameter("@Datasource",pendingAttachment.DataSource),new sqlParameter("@LastUpdated",pendingAttachment.LastUpdated),new sqlParameter("@PendingCount",pendingAttachment.PendingCount),new sqlParameter("@deviceid",pendingAttachment.deviceid),new sqlParameter("@Username",pendingAttachment.UserName),};
try
{
RequestHeaders headers = new RequestHeaders();
var query = "SELECT count(*) FROM PendingAttachments WHERE deviceid = @deviceid AND UserName = @UserName";
using (var onbaseConnection = MobileCompleteServer.Helpers.OnbaseAuth.Connect(headers))
{
var connectionString = System.Configuration.ConfigurationManager.AppSettings["ConnectionString"];
using (sqlConnection sqlConnection = new sqlConnection(connectionString))
{
sqlConnection.open();
using (sqlCommand comm = new sqlCommand(query,sqlConnection))
{
comm.CommandType = System.Data.CommandType.Text;
foreach(PendingAttachment attachment in pendingAttachmentRequest)
{
comm.Parameters.AddRange(sqlParameters.ToArray());
comm.Parameters.Clear();
}
int rowCount = (int)comm.ExecuteScalar(); //FAILS HERE
if (rowCount > 0)
{
using (sqlCommand sqlComm = new sqlCommand("sp_UpdatePendingAttachments",sqlConnection))
{
sqlComm.CommandType = System.Data.CommandType.StoredProcedure;
foreach (PendingAttachment attachment in pendingAttachmentRequest)
{
sqlComm.Parameters.AddRange(sqlParameters.ToArray());
sqlComm.Parameters.Clear();
}
sqlComm.ExecuteNonQuery();
}
}
else
{
using (sqlCommand sqlCommand = new sqlCommand("sp_InsertPendingAttachments",sqlConnection))
{
sqlCommand.CommandType = System.Data.CommandType.StoredProcedure;
foreach(PendingAttachment attachment in pendingAttachmentRequest)
{
sqlCommand.Parameters.AddRange(sqlParameters.ToArray());
sqlCommand.Parameters.Clear();
}
sqlCommand.ExecuteNonQuery();
}
}
}
}
return new BaseResponse();
}
}
catch (Exception ex)
{
return new BaseResponse
{
Exception = ErrorCodes.Get(ex,ErrorCodes.PendingAttachmentError),ExceptionStackTrace = ex.ToString()
};
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。