Tedious: TypeError: Eigenschaft 'hasPrecision' kann nicht gelesen werden

Erstellt am 5. Mai 2016  ·  18Kommentare  ·  Quelle: tediousjs/tedious

Ich habe diesen Fehler mit dem mssql-Modul erhalten, also bin ich auf nur mühsamen Code umgestiegen, und ich erhalte denselben Fehler mit minimal.js. Ich vermute, dass es eine SQL Server-Einstellung gibt, die ich hier benötige. Meine Datenbank ist SQL Server 12.0.4422. Ich habe gerade Node auf v4.4.3 aktualisiert und alle Pakete aktualisiert.

Die Abfrage erzeugt 10 Datensätze. Mit mssql bombardiert es einfach. Mit dem minimal.js-Code bombardiert es _nachdem der erste Datensatz in die Konsole geschrieben wurde_.

Danke!

c:\Users\hallrogera\Documents\Projects\workbench\node_modules\mssql\node_modules
\tedious\lib\metadata-parser.js:45
  if (type.hasPrecision) {
          ^

TypeError: Cannot read property 'hasPrecision' of undefined
    at readPrecision (c:\Users\hallrogera\Documents\Projects\workbench\node_modu
les\mssql\node_modules\tedious\lib\metadata-parser.js:45:11)
    at c:\Users\hallrogera\Documents\Projects\workbench\node_modules\mssql\node_
modules\tedious\lib\value-parser.js:348:22
    at c:\Users\hallrogera\Documents\Projects\workbench\node_modules\mssql\node_
modules\tedious\lib\token\stream-parser.js:147:9
    at Parser.awaitData (c:\Users\hallrogera\Documents\Projects\workbench\node_m
odules\mssql\node_modules\tedious\lib\token\stream-parser.js:121:9)
    at Parser.readUInt8 (c:\Users\hallrogera\Documents\Projects\workbench\node_m
odules\mssql\node_modules\tedious\lib\token\stream-parser.js:144:12)
    at c:\Users\hallrogera\Documents\Projects\workbench\node_modules\mssql\node_
modules\tedious\lib\value-parser.js:345:27
    at c:\Users\hallrogera\Documents\Projects\workbench\node_modules\mssql\node_
modules\tedious\lib\token\stream-parser.js:147:9
    at Parser.awaitData (c:\Users\hallrogera\Documents\Projects\workbench\node_m
odules\mssql\node_modules\tedious\lib\token\stream-parser.js:121:9)
    at Parser.readUInt8 (c:\Users\hallrogera\Documents\Projects\workbench\node_m
odules\mssql\node_modules\tedious\lib\token\stream-parser.js:144:12)
    at c:\Users\hallrogera\Documents\Projects\workbench\node_modules\mssql\node_
modules\tedious\lib\value-parser.js:344:25

Hilfreichster Kommentar

Ich habe Ihre Beiträge für Sie neu formatiert, aber in Zukunft verwenden Sie bitte den richtigen Markdown, damit der Code tatsächlich lesbar ist. Wenn Sie nicht vertraut sind, besuchen Sie https://guides.github.com/features/mastering-markdown/

Alle 18 Kommentare

Mit mühsamer Gerade:

c:\Users\hallrogera\Documents\Projects\workbench\node_modules\tedious\lib\metada
ta-parser.js:45
  if (type.hasPrecision) {
          ^

TypeError: Cannot read property 'hasPrecision' of undefined
    at readPrecision (c:\Users\hallrogera\Documents\Projects\workbench\node_modu
les\tedious\lib\metadata-parser.js:45:11)
    at c:\Users\hallrogera\Documents\Projects\workbench\node_modules\tedious\lib
\value-parser.js:348:22
    at c:\Users\hallrogera\Documents\Projects\workbench\node_modules\tedious\lib
\token\stream-parser.js:147:9
    at Parser.awaitData (c:\Users\hallrogera\Documents\Projects\workbench\node_m
odules\tedious\lib\token\stream-parser.js:121:9)
    at Parser.readUInt8 (c:\Users\hallrogera\Documents\Projects\workbench\node_m
odules\tedious\lib\token\stream-parser.js:144:12)
    at c:\Users\hallrogera\Documents\Projects\workbench\node_modules\tedious\lib
\value-parser.js:345:27
    at c:\Users\hallrogera\Documents\Projects\workbench\node_modules\tedious\lib
\token\stream-parser.js:147:9
    at Parser.awaitData (c:\Users\hallrogera\Documents\Projects\workbench\node_m
odules\tedious\lib\token\stream-parser.js:121:9)
    at Parser.readUInt8 (c:\Users\hallrogera\Documents\Projects\workbench\node_m
odules\tedious\lib\token\stream-parser.js:144:12)
    at c:\Users\hallrogera\Documents\Projects\workbench\node_modules\tedious\lib
\value-parser.js:344:25

Sie sollten ein vollständiges Codebeispiel einfügen, das diesen Fehler demonstriert.

Ich verwende minimal.js.

var Connection = require('tedious').Connection;
var Request = require('tedious').Request;

var config = {
  server: 'DMIRT108',
  userName: 'xxx',
  password: 'yyy',
  options: {
    debug: {
      packet: true,
      data: true,
      payload: true,
      token: false,
      log: true
    },
    database: 'zzz'
    // ,encrypt: true // for Azure
  }
};

var q = "SELECT * FROM VU_TABLE_INFO WHERE [table_name] = 'STORAGE_ITEM'";

var connection = new Connection(config);

connection.on('connect', function(err) {
    // If no error, then good to go...
    executeStatement();
  }
);

connection.on('debug', function(text) {
    //console.log(text);
  }
);

function executeStatement() {
  request = new Request(q, function(err, rowCount) {
    if (err) {
      console.log(err);
    } else {
      console.log(rowCount + ' rows');
    }

    connection.close();
  });

  request.on('row', function(columns) {
    columns.forEach(function(column) {
      if (column.value === null) {
        console.log('NULL');
      } else {
        console.log(column.value);
      }
    });
  });

  request.on('done', function(rowCount, more) {
    console.log(rowCount + ' rows returned');
  });

  // In SQL Server 2000 you may need: connection.execSqlBatch(request);
  connection.execSql(request);
}

Übrigens, mssql funktioniert gut für eine Zeichenfolgenabfrage, gibt diesen Fehler jedoch bei Eingaben für Abfragen aus

Ich habe Ihre Beiträge für Sie neu formatiert, aber in Zukunft verwenden Sie bitte den richtigen Markdown, damit der Code tatsächlich lesbar ist. Wenn Sie nicht vertraut sind, besuchen Sie https://guides.github.com/features/mastering-markdown/

War mir nicht bewusst, danke. :}

Der Vollständigkeit halber hier der MSSQL-Code:

var sql = require('mssql');

sql.connect("mssql://xxx:yyy@DMIRT108/zzz").then(function() {
    new sql
        .Request()
        .input("table_name", sql.VarChar(128), "STORAGE_ITEM")
        .query("SELECT * FROM VU_TABLE_INFO WHERE [table_name] = @table_name")

        .then(function(recordset) {
            console.dir(recordset);
            conn.close();
        }).catch(function(err) {
            // ... query error checks 
        });

}).catch(function(err) {
    // ... connect error checks 
});

Was ist das Schema von VU_TABLE_INFO ?

Ich habe das Erstellungsskript nicht, und ich habe eine Fehlermeldung erhalten, als ich versucht habe, das Skript CREATE. Im Anhang sind Screenshots des Fehlers und des Schemas in der MSSMS-Baumansicht. Das Skript minimal.js gibt alle Spalten des ersten Datensatzes aus.

issue_160505
issue_160505_schema

Welche Version von mssql/tedious verwenden Sie?

Diese Abfrage funktioniert gut für eine andere Tabelle. Vielleicht ist es der Typ SQL_VARIANT ?

SELECT * FROM [SPECIMEN_DEV].[dbo].[STORAGE_ITEM] WHERE [store_config_id] = 5

schema_storage_item_160505

Sie haben Recht, SQL_VARIANT wird von Tedious nicht unterstützt. Von der Verwendung in SQL Server wird abgeraten, daher hat niemand jemals Unterstützung dafür geschrieben. Möglicherweise können Sie CONVERT() in Ihren Abfragen als SQL_VARIANT Unterstützung hinzufügt.

Tatsächlich wurde die Unterstützung in 1.14 ( PR ) hinzugefügt. Ich muss herausfinden, welcher Wert diese Ausnahme verursacht.

@patriksimek wenn es unterstützt wird, sollte es zu https://pekim.github.io/tedious/api-datatypes.html hinzugefügt werden

Ich stimme zu, behoben (docs).

Nun, ich habe noch keine gute Empfehlung, wo das Problem behoben werden kann, aber es sind definitiv NULL Werte, die dies verursachen. Ich kann die Absturzstelle vorhersagen (und wie oft readPrecision() aufgerufen wird, bevor es dazu kommt), indem ich die SQL-Abfrage gestalte; jedes Mal, wenn ein NULL fällig ist, explodiert es. TIA!

In value-parser.js , in case 'Variant' ist das baseType für NULL 26.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen