Tedious
    Preparing search index...

    Class Connection

    A Connection instance represents a single connection to a database server.

    var Connection = require('tedious').Connection;
    var config = {
    "authentication": {
    ...,
    "options": {...}
    },
    "options": {...}
    };
    var connection = new Connection(config);

    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.

    Hierarchy

    • EventEmitter
      • Connection
    Index

    Constructors

    • Note: be aware of the different options field:

      1. config.authentication.options
      2. config.options
      const { Connection } = require('tedious');

      const config = {
      "authentication": {
      ...,
      "options": {...}
      },
      "options": {...}
      };

      const connection = new Connection(config);

      Parameters

      Returns Connection

    Methods

    • The 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.
      }
      }

      Parameters

      • error: Error
      • event: string | symbol
      • ...args: any[]

      Returns void

      v13.4.0, v12.16.0

    • Alias for emitter.on(eventName, listener).

      Type Parameters

      • E extends string | symbol

      Parameters

      • eventName: string | symbol
      • listener: (...args: any[]) => void

      Returns this

      v0.1.26

    • Start a transaction.

      Parameters

      • callback: BeginTransactionCallback
      • name: string = ''

        A string representing a name to associate with the transaction. Optional, and defaults to an empty string. Required when isolationLevel is present.

      • isolationLevel: number = ...

        The isolation level that the transaction is to be run with.

        The isolation levels are available from require('tedious').ISOLATION_LEVEL.

        • READ_UNCOMMITTED
        • READ_COMMITTED
        • REPEATABLE_READ
        • SERIALIZABLE
        • SNAPSHOT

        Optional, and defaults to the Connection's isolation level.

      Returns void

    • Closes the connection to the database.

      The end event will be emitted once the connection has been closed.

      Returns void

    • Commit a transaction.

      There should be an active transaction - that is, beginTransaction should have been previously called.

      Parameters

      • callback: CommitTransactionCallback
      • name: string = ''

        A string representing a name to associate with the transaction. Optional, and defaults to an empty string. Required when isolationLevelis present.

      Returns void

    • Parameters

      • port: number
      • multiSubnetFailover: boolean
      • signal: AbortSignal
      • OptionalcustomConnector: () => Promise<Socket>

      Returns Promise<Socket>

    • Returns 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) ]

      Returns (string | symbol)[]

      v6.0.0

    • 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());

      Parameters

      Returns void

    • 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

      Parameters

      Returns void

    • Execute the SQL batch represented by Request. There is no param support, and unlike execSql, it is not likely that SQL Server will reuse the execution plan it generates for the SQL.

      In almost all cases, execSql will be a better choice.

      Parameters

      Returns void

    • Execute previously prepared SQL, using the supplied parameters.

      Parameters

      • request: Request

        A previously prepared Request.

      • Optionalparameters: { [key: string]: unknown }

        An object whose names correspond to the names of parameters that were added to the Request before it was prepared. The object's values are passed as the parameters' values when the request is executed.

      Returns void

    • Returns the current max listener value for the EventEmitter which is either set by emitter.setMaxListeners(n) or defaults to events.defaultMaxListeners.

      Returns number

      v1.0.0

    • 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.

      Type Parameters

      • E extends string | symbol

      Parameters

      • eventName: string | symbol

        The name of the event being listened for

      • Optionallistener: (...args: any[]) => void

        The event handler function

      Returns number

      v3.2.0

    • 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] ]

      Type Parameters

      • E extends string | symbol

      Parameters

      • eventName: string | symbol

      Returns ((...args: any[]) => void)[]

      v0.1.26

    • Alias for emitter.removeListener().

      Type Parameters

      • E extends string | symbol

      Parameters

      • eventName: string | symbol
      • listener: (...args: any[]) => void

      Returns this

      v10.0.0

    • The server has reported that the charset has changed.

      Parameters

      • event: "charsetChange"
      • listener: (charset: string) => void

      Returns this

    • The attempt to connect and validate has completed.

      Parameters

      • event: "connect"
      • listener: (err: Error | undefined) => void
          • (err: Error | undefined): void
          • Parameters

            • err: Error | undefined

              If successfully connected, will be falsy. If there was a problem (with either connecting or validation), will be an Error object.

            Returns void

      Returns this

    • The server has reported that the active database has changed. This may be as a result of a successful login, or a use statement.

      Parameters

      • event: "databaseChange"
      • listener: (databaseName: string) => void

      Returns this

    • A debug message is available. It may be logged or ignored.

      Parameters

      • event: "debug"
      • listener: (messageText: string) => void

      Returns this

    • Internal error occurs.

      Parameters

      • event: "error"
      • listener: (err: Error) => void

      Returns this

    • The server has issued an error message.

      Parameters

      • event: "errorMessage"
      • listener: (message: ErrorMessageToken) => void

      Returns this

    • The connection has ended.

      This may be as a result of the client calling close, the server closing the connection, or a network error.

      Parameters

      • event: "end"
      • listener: () => void

      Returns this

    • The server has issued an information message.

      Parameters

      • event: "infoMessage"
      • listener: (message: InfoMessageToken) => void

      Returns this

    • The server has reported that the language has changed.

      Parameters

      • event: "languageChange"
      • listener: (languageName: string) => void

      Returns this

    • The connection was reset.

      Parameters

      • event: "resetConnection"
      • listener: () => void

      Returns this

    • A secure connection has been established.

      Parameters

      • event: "secure"
      • listener: (cleartext: TLSSocket) => void

      Returns this

    • 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

      Type Parameters

      • E extends string | symbol

      Parameters

      • eventName: string | symbol

        The name of the event.

      • listener: (...args: any[]) => void

        The callback function

      Returns this

      v0.3.0

    • Prepare the SQL represented by the request.

      The request can then be used in subsequent calls to execute and unprepare

      Parameters

      • request: Request

        A Request object representing the request. Parameters only require a name and type. Parameter values are ignored.

      Returns void

    • 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.

      Type Parameters

      • E extends string | symbol

      Parameters

      • eventName: string | symbol

        The name of the event.

      • listener: (...args: any[]) => void

        The callback function

      Returns this

      v6.0.0

    • 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.

      Type Parameters

      • E extends string | symbol

      Parameters

      • eventName: string | symbol

        The name of the event.

      • listener: (...args: any[]) => void

        The callback function

      Returns this

      v6.0.0

    • 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');

      Type Parameters

      • E extends string | symbol

      Parameters

      • eventName: string | symbol

      Returns ((...args: any[]) => void)[]

      v9.4.0

    • Parameters

      • signal: AbortSignal

      Returns Promise<PreloginPayload>

    • 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.

      Type Parameters

      • E extends string | symbol

      Parameters

      • OptionaleventName: string | symbol

      Returns this

      v0.1.26

    • Removes 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.

      Type Parameters

      • E extends string | symbol

      Parameters

      • eventName: string | symbol
      • listener: (...args: any[]) => void

      Returns this

      v0.1.26

    • Rollback a transaction.

      There should be an active transaction - that is, beginTransaction should have been previously called.

      Parameters

      • callback: RollbackTransactionCallback
      • name: string = ''

        A string representing a name to associate with the transaction. Optional, and defaults to an empty string. Required when isolationLevel is present.

      Returns void

    • Set a savepoint within a transaction.

      There should be an active transaction - that is, beginTransaction should have been previously called.

      Parameters

      • callback: SaveTransactionCallback
      • name: string

        A string representing a name to associate with the transaction.
        Optional, and defaults to an empty string. Required when isolationLevel is present.

      Returns void

    • 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.

      Parameters

      • n: number

      Returns this

      v0.3.5

    • 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.

      Parameters

      • cb: (
            err: Error | null | undefined,
            txDone?: <T extends TransactionDoneCallback>(
                err: Error | null | undefined,
                done: T,
                ...args: CallbackParameters<T>,
            ) => void,
        ) => void
      • OptionalisolationLevel: number

        The isolation level that the transaction is to be run with.

        The isolation levels are available from require('tedious').ISOLATION_LEVEL.

        • READ_UNCOMMITTED
        • READ_COMMITTED
        • REPEATABLE_READ
        • SERIALIZABLE
        • SNAPSHOT

        Optional, and defaults to the Connection's isolation level.

      Returns void

    • Release the SQL Server resources associated with a previously prepared request.

      Parameters

      • request: Request

        A Request object representing the request. Parameters only require a name and type. Parameter values are ignored.

      Returns void

    • Parameters

      • socket: Socket
      • signal: AbortSignal

      Returns Promise<TLSSocket>