Note: be aware of the different options field:
const { Connection } = require('tedious');
const config = {
"authentication": {
...,
"options": {...}
},
"options": {...}
};
const connection = new Connection(config);
Optional[captureThe Symbol.for('nodejs.rejection') method is called in case a
promise rejection happens when emitting an event and
captureRejections is enabled on the emitter.
It is possible to use events.captureRejectionSymbol in
place of Symbol.for('nodejs.rejection').
import { EventEmitter, captureRejectionSymbol } from 'node:events';
class MyClass extends EventEmitter {
constructor() {
super({ captureRejections: true });
}
[captureRejectionSymbol](err, event, ...args) {
console.log('rejection happened for', event, 'with', err, ...args);
this.destroy(err);
}
destroy(err) {
// Tear the resource down here.
}
}
Start a transaction.
A string representing a name to associate with the transaction.
Optional, and defaults to an empty string. Required when isolationLevel
is present.
The isolation level that the transaction is to be run with.
The isolation levels are available from require('tedious').ISOLATION_LEVEL.
READ_UNCOMMITTEDREAD_COMMITTEDREPEATABLE_READSERIALIZABLESNAPSHOTOptional, and defaults to the Connection's isolation level.
Cancel currently executed request.
Closes the connection to the database.
The end event will be emitted once the connection has been closed.
Commit a transaction.
There should be an active transaction - that is, beginTransaction should have been previously called.
A string representing a name to associate with the transaction.
Optional, and defaults to an empty string. Required when isolationLevelis present.
OptionalconnectListener: (err?: Error) => voidReturns an array listing the events for which the emitter has registered listeners.
import { EventEmitter } from 'node:events';
const myEE = new EventEmitter();
myEE.on('foo', () => {});
myEE.on('bar', () => {});
const sym = Symbol('symbol');
myEE.on(sym, () => {});
console.log(myEE.eventNames());
// Prints: [ 'foo', 'bar', Symbol(symbol) ]
Execute a BulkLoad.
// We want to perform a bulk load into a table with the following format:
// CREATE TABLE employees (first_name nvarchar(255), last_name nvarchar(255), day_of_birth date);
const bulkLoad = connection.newBulkLoad('employees', (err, rowCount) => {
// ...
});
// First, we need to specify the columns that we want to write to,
// and their definitions. These definitions must match the actual table,
// otherwise the bulk load will fail.
bulkLoad.addColumn('first_name', TYPES.NVarchar, { nullable: false });
bulkLoad.addColumn('last_name', TYPES.NVarchar, { nullable: false });
bulkLoad.addColumn('day_of_birth', TYPES.Date, { nullable: false });
// Execute a bulk load with a predefined list of rows.
//
// Note that these rows are held in memory until the
// bulk load was performed, so if you need to write a large
// number of rows (e.g. by reading from a CSV file),
// passing an `AsyncIterable` is advisable to keep memory usage low.
connection.execBulkLoad(bulkLoad, [
{ 'first_name': 'Steve', 'last_name': 'Jobs', 'day_of_birth': new Date('02-24-1955') },
{ 'first_name': 'Bill', 'last_name': 'Gates', 'day_of_birth': new Date('10-28-1955') }
]);
The connection owns rows from this call on, the way a for await
loop owns what it iterates. The first row is requested right away,
the rest once the server has accepted the bulk load, and the source
is closed through its iterator's return() whenever the bulk load
does not run to completion: a row failed, the bulk load was canceled,
the server rejected the INSERT BULK statement, or the connection
was lost. For a Node.js stream that destroys the stream. A read that
is still pending in the source cannot be interrupted; the source is
closed once it has settled.
An async generator that acquires what it reads from once it is
started therefore releases it on every path, through its finally:
async function* employees() {
const file = await fs.promises.open('employees.csv');
try {
for await (const line of file.readLines()) {
const [first_name, last_name, day_of_birth] = line.split(',');
yield { first_name, last_name, day_of_birth: new Date(day_of_birth) };
}
} finally {
await file.close();
}
}
connection.execBulkLoad(bulkLoad, employees());
A previously created BulkLoad.
A Iterable or AsyncIterable that contains the rows that should be bulk loaded.
Execute the SQL represented by Request.
As sp_executesql is used to execute the SQL, if the same SQL is executed multiples times
using this function, the SQL Server query optimizer is likely to reuse the execution plan it generates
for the first execution. This may also result in SQL server treating the request like a stored procedure
which can result in the doneInProc or doneProc events being emitted instead of the
done event you might expect. Using execSqlBatch will prevent this from occurring but may have a negative performance impact.
Beware of the way that scoping rules apply, and how they may affect local temp tables If you're running in to scoping issues, then execSqlBatch may be a better choice. See also issue #24
Execute previously prepared SQL, using the supplied parameters.
Returns the number of listeners listening for the event named eventName.
If listener is provided, it will return how many times the listener is found
in the list of the listeners of the event.
The name of the event being listened for
Optionallistener: (...args: any[]) => voidThe event handler function
Returns a copy of the array of listeners for the event named eventName.
server.on('connection', (stream) => {
console.log('someone connected!');
});
console.log(util.inspect(server.listeners('connection')));
// Prints: [ [Function] ]
Creates a new BulkLoad instance.
The name of the table to bulk-insert into.
Creates a new BulkLoad instance.
The name of the table to bulk-insert into.
A set of bulk load options.
The server has reported that the charset has changed.
The attempt to connect and validate has completed.
The server has reported that the active database has changed.
This may be as a result of a successful login, or a use statement.
A debug message is available. It may be logged or ignored.
The server has issued an error message.
The connection has ended.
This may be as a result of the client calling close, the server closing the connection, or a network error.
The server has issued an information message.
The server has reported that the language has changed.
The connection was reset.
A secure connection has been established.
Adds a one-time listener function for the event named eventName. The
next time eventName is triggered, this listener is removed and then invoked.
server.once('connection', (stream) => {
console.log('Ah, we have our first user!');
});
Returns a reference to the EventEmitter, so that calls can be chained.
By default, event listeners are invoked in the order they are added. The
emitter.prependOnceListener() method can be used as an alternative to add the
event listener to the beginning of the listeners array.
import { EventEmitter } from 'node:events';
const myEE = new EventEmitter();
myEE.once('foo', () => console.log('a'));
myEE.prependOnceListener('foo', () => console.log('b'));
myEE.emit('foo');
// Prints:
// b
// a
The name of the event.
The callback function
Adds the listener function to the beginning of the listeners array for the
event named eventName. No checks are made to see if the listener has
already been added. Multiple calls passing the same combination of eventName
and listener will result in the listener being added, and called, multiple
times.
server.prependListener('connection', (stream) => {
console.log('someone connected!');
});
Returns a reference to the EventEmitter, so that calls can be chained.
The name of the event.
The callback function
Adds a one-time listener function for the event named eventName to the
beginning of the listeners array. The next time eventName is triggered, this
listener is removed, and then invoked.
server.prependOnceListener('connection', (stream) => {
console.log('Ah, we have our first user!');
});
Returns a reference to the EventEmitter, so that calls can be chained.
The name of the event.
The callback function
Returns a copy of the array of listeners for the event named eventName,
including any wrappers (such as those created by .once()).
import { EventEmitter } from 'node:events';
const emitter = new EventEmitter();
emitter.once('log', () => console.log('log once'));
// Returns a new Array with a function `onceWrapper` which has a property
// `listener` which contains the original listener bound above
const listeners = emitter.rawListeners('log');
const logFnWrapper = listeners[0];
// Logs "log once" to the console and does not unbind the `once` event
logFnWrapper.listener();
// Logs "log once" to the console and removes the listener
logFnWrapper();
emitter.on('log', () => console.log('log persistently'));
// Will return a new Array with a single function bound by `.on()` above
const newListeners = emitter.rawListeners('log');
// Logs "log persistently" twice
newListeners[0]();
emitter.emit('log');
Removes all listeners, or those of the specified eventName.
It is bad practice to remove listeners added elsewhere in the code,
particularly when the EventEmitter instance was created by some other
component or module (e.g. sockets or file streams).
Returns a reference to the EventEmitter, so that calls can be chained.
OptionaleventName: string | symbolRemoves the specified listener from the listener array for the event named
eventName.
const callback = (stream) => {
console.log('someone connected!');
};
server.on('connection', callback);
// ...
server.removeListener('connection', callback);
removeListener() will remove, at most, one instance of a listener from the
listener array. If any single listener has been added multiple times to the
listener array for the specified eventName, then removeListener() must be
called multiple times to remove each instance.
Once an event is emitted, all listeners attached to it at the
time of emitting are called in order. This implies that any
removeListener() or removeAllListeners() calls after emitting and
before the last listener finishes execution will not remove them from
emit() in progress. Subsequent events behave as expected.
import { EventEmitter } from 'node:events';
class MyEmitter extends EventEmitter {}
const myEmitter = new MyEmitter();
const callbackA = () => {
console.log('A');
myEmitter.removeListener('event', callbackB);
};
const callbackB = () => {
console.log('B');
};
myEmitter.on('event', callbackA);
myEmitter.on('event', callbackB);
// callbackA removes listener callbackB but it will still be called.
// Internal listener array at time of emit [callbackA, callbackB]
myEmitter.emit('event');
// Prints:
// A
// B
// callbackB is now removed.
// Internal listener array [callbackA]
myEmitter.emit('event');
// Prints:
// A
Because listeners are managed using an internal array, calling this will
change the position indexes of any listener registered after the listener
being removed. This will not impact the order in which listeners are called,
but it means that any copies of the listener array as returned by
the emitter.listeners() method will need to be recreated.
When a single function has been added as a handler multiple times for a single
event (as in the example below), removeListener() will remove the most
recently added instance. In the example the once('ping')
listener is removed:
import { EventEmitter } from 'node:events';
const ee = new EventEmitter();
function pong() {
console.log('pong');
}
ee.on('ping', pong);
ee.once('ping', pong);
ee.removeListener('ping', pong);
ee.emit('ping');
ee.emit('ping');
Returns a reference to the EventEmitter, so that calls can be chained.
Reset the connection to its initial state. Can be useful for connection pool implementations.
Rollback a transaction.
There should be an active transaction - that is, beginTransaction should have been previously called.
A string representing a name to associate with the transaction.
Optional, and defaults to an empty string.
Required when isolationLevel is present.
Set a savepoint within a transaction.
There should be an active transaction - that is, beginTransaction should have been previously called.
A string representing a name to associate with the transaction.
Optional, and defaults to an empty string.
Required when isolationLevel is present.
By default EventEmitters will print a warning if more than 10 listeners are
added for a particular event. This is a useful default that helps finding
memory leaks. The emitter.setMaxListeners() method allows the limit to be
modified for this specific EventEmitter instance. The value can be set to
Infinity (or 0) to indicate an unlimited number of listeners.
Returns a reference to the EventEmitter, so that calls can be chained.
Run the given callback after starting a transaction, and commit or rollback the transaction afterwards.
This is a helper that employs beginTransaction, commitTransaction, rollbackTransaction, and saveTransaction to greatly simplify the use of database transactions and automatically handle transaction nesting.
OptionalisolationLevel: numberThe isolation level that the transaction is to be run with.
The isolation levels are available from require('tedious').ISOLATION_LEVEL.
READ_UNCOMMITTEDREAD_COMMITTEDREPEATABLE_READSERIALIZABLESNAPSHOTOptional, and defaults to the Connection's isolation level.
A Connection instance represents a single connection to a database server.
Only one request at a time may be executed on a connection. Once a Request has been initiated (with Connection.callProcedure, Connection.execSql, or Connection.execSqlBatch), another should not be initiated until the Request's completion callback is called.