SQL Server утомительный обратный вызов

Я не могу использовать обратный вызов tedious on Request (это запрос INSERT), чтобы сделать еще один запрос сразу после первого. Любая идея? Вот мой код

function intermediaryPositionSQL(decodeMessage, connection) {
  if (typeof (decodeMessage.latitudeInt) != "undefined" && typeof (decodeMessage.longitudeInt) != "undefined")
  {
    var request = new Request(requestPosQuery, function (error)
    {
      if (error) {
        winston.error(error);
      }
    });
    request.addParameter('v_pos_latitude', TYPES.Float, decodeMessage.latitudeInt);
    request.addParameter('v_pos_longitude', TYPES.Float, decodeMessage.longitudeInt);
    request.addParameter('v_pos_altitude', TYPES.Int, (typeof (decodeMessage.altitude) != "undefined") ? decodeMessage.altitude : null);
    request.addParameter('v_pos_speed', TYPES.Int, (typeof (decodeMessage.speed) != "undefined") ? decodeMessage.speed : null);
    request.addParameter('v_pos_move', TYPES.Int, decodeMessage.move);
    request.addParameter('v_pos_type', TYPES.Int, 2);
    request.addParameter('v_pos_device', TYPES.VarChar, decodeMessage.device);
    request.addParameter('v_pos_timestamp', TYPES.Int, decodeMessage.time);

    request.on('doneInProc', function (rowCount, more, rows) {
        return;
    });

    connection.execSql(request);
  }  else {
    return;
  }
}

function actualPositionSQL(decodeMessage, connection) {
  if (typeof (decodeMessage.latitude) != "undefined" && typeof (decodeMessage.longitude) != "undefined")
  {
    var request = new Request(requestPosQuery, function (error)
    {
      if (error) {
        winston.error(error);
      }
    });
    request.addParameter('v_pos_latitude', TYPES.Float, decodeMessage.latitude);
    request.addParameter('v_pos_longitude', TYPES.Float, decodeMessage.longitude);
    request.addParameter('v_pos_altitude', TYPES.Int, (typeof (decodeMessage.altitude) != "undefined") ? decodeMessage.altitude : null);
    request.addParameter('v_pos_speed', TYPES.Int, (typeof (decodeMessage.speed) != "undefined") ? decodeMessage.speed : null);
    request.addParameter('v_pos_move', TYPES.Int, decodeMessage.move);
    request.addParameter('v_pos_type', TYPES.Int, 1);
    request.addParameter('v_pos_device', TYPES.VarChar, decodeMessage.device);
    request.addParameter('v_pos_timestamp', TYPES.Int, decodeMessage.time);

    request.on('doneInProc', function (rowCount, more, rows) {
        intermediaryPositionSQL(decodeMessage, connection);
    });

    connection.execSql(request);
  }  else {
    intermediaryPositionSQL(decodeMessage, connection);
  }
}

Этот код должен просто ВСТАВИТЬ в первый раз с запросом SQL, а затем сделать это снова с новыми значениями

Ошибка:

error:  RequestError: Requests can only be made in the LoggedIn state, not the SentClientRequest state

Вот конфигурация моего Azure SQL Server:

var config = {
  userName: '***@***',
  password: '*******',
  server: '******.database.windows.net',
  options: {encrypt: true, database: '******'}
};

Я пробовал с doneProc, row и даже с done без успеха. doneProc делает ту же ошибку, что и doneInProc, и row / done не вызывается.

1 ответ

Попробуйте использовать обратный вызов в конструкторе Request для вызова следующего запроса:

function firstQuery(param, connection) {
    if (typeof (param.foo) != "undefined" && typeof (param.bar) != "undefined") {
       var request = new Request(firstSQL, function (error, rowCount) {
          if (error) {
             winston.error(error);
          }
          else {
             secondQuery(param, connection);
          }
       });
       // add parameters
       connection.execSql(request)
    }
}

согласно документации этот обратный вызов вызывается, когда запрос завершен. doneInProc а также doneProc события актуальны только тогда, когда вы используете "хранимые процедуры" на сервере базы данных. Для простого оператора вставки или выбора функция обратного вызова конструктора - это то, что вы хотите использовать.

Другие вопросы по тегам