问题描述
我有一个接收对象列表的控制器。首先,它使用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 (将#修改为@)