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
события актуальны только тогда, когда вы используете "хранимые процедуры" на сервере базы данных. Для простого оператора вставки или выбора функция обратного вызова конструктора - это то, что вы хотите использовать.