0

Après avoir essayé de consulter des dizaines d'exemples et lu la plupart des documents, et essayé de nombreuses variantes, et modifié de nombreux paramètres dans SQL Server, je suis finalement tombé en panne demander de l'aide pour celui-ci.Connexion à SQL Server avec knexjs, Impossible d'acquérir une connexion

Je me suis connecté avec succès à un tblTextKnex avec mssqljs en utilisant exactement la même chaîne de connexion que SQL Server accepte, mais je n'ai pas pu le faire avec knexjs depuis un certain temps.

je reçois l'avertissement suivant et erreur:

Knex:warning - calling knex without a tableName is deprecated. Use knex.queryBuilder() instead.

et

Unhandled rejection Error: Unable to acquire a connection

Ce code échoue/offensant que je croyais devrait fonctionner.

var knex = require('knex')({ 
    client: 'mssql', 
    connectionString: "Initial Catalog=TextKnex;Data Source=localhost\\TESTINSTANCE;User ID=my_user_id;Password=my_password;Integrated Security=SSPI;" 
    }); 

    knex().connection().then(() => { 
    knex('TextKnex').table('Products') 
     .select('Products.Price as Price') 
     .then((product) => { 
      console.log('log product', product); 
      console.dir('dir product', product); 
      logger.info('Query Data: %j', product); 
    }) 
    }); 
    knex.destroy(); 

Répondre

1

Je suis assez sûr, il n'y a pas connectionString attribut et méthode constructeur connection() de requête est documenté pour ne pas fonctionner (et ne vérifie pas si la piscine a été connecté). Aussi appelé de manière synchrone knex.destroy() à la fin détruit votre instance de knex, avant que toutes les requêtes ou connexions auraient été faites.

Essayez ceci:

var knex = require('knex')({ 
    client: 'mssql', 
    connection: { 
     connectionString: "Initial Catalog=TextKnex;Data Source=localhost\\TESTINSTANCE;User ID=my_user_id;Password=my_password;Integrated Security=SSPI;" 
    } 
    }); 

    knex('TextKnex').table('Products') 
    .select('Products.Price as Price') 
    .then((product) => { 
     console.log('log product', product); 
     console.dir('dir product', product); 
     logger.info('Query Data: %j', product); 
    }) 
    .finally(() => { 
     knex.destroy(); 
    }); 

ou

var knex = require('knex')({ 
    client: 'mssql', 
    connection: "Initial Catalog=TextKnex;Data Source=localhost\\TESTINSTANCE;User ID=my_user_id;Password=my_password;Integrated Security=SSPI;" 
    }); 

    ... 

Dans les tests de KNEX connexion MSSQL se fait un peu de manière différente: https://github.com/tgriesser/knex/blob/master/test/knexfile.js#L132

+0

Ni les premières options ni deuxième vous offrent du travail, qui est surprenant compte tenu des états de knex.org "Les options de connexion sont passées directement au client de base de données approprié pour créer la connexion, et peuvent être soit un objet, soit une chaîne de connexion : " – Urasquirrel

+0

J'ai également essayé de changer la version de 4 à 3.3.0 car cela a également causé des problèmes pour d'autres personnes dans le passé. Cela n'a également pas fonctionné, – Urasquirrel

+0

Également utiliser le format suggéré dans les fichiers de test n'a pas fonctionné. knex = require ('knex') ({dialecte : connexion 'MSSQL', : { utilisateur: "\\ computername kyles2", mot de passe: "p_w", serveur: "127.0.0.1", base de données : "TextKnex", port: 59438 } – Urasquirrel