edge-sql
v1.0.3
Published
Edge-sql: access SQL databases from Node.js using Edge.js and ADO.NET
Downloads
60
Readme
edge-sql
MS SQL Server compiler for Edge.js.
This library is based on https://github.com/tjanczuk/edge-sql all credit for original work goes to Tomasz Janczuk.
Overview
- Supports returning multiple results from queries
- Supports any type of SQL statement allowing to run complex queries that declare variables, temp tables etc...
- Supports stored procedures with return parameters
NOTE SQL Server Geography and Geometry types are not supported.
Supported .NET frameworks
- .NET 4.6.2
- .NET Core - netstandard 2.0
SQL statement interpretation (statement starts with...)
| SQL Statement | C# Implemetation | | --------------- | -------------------- | | select | ExecuteReaderAsync | | update | ExecuteNonQueryAsync | | insert | ExecuteNonQueryAsync | | delete | ExecuteNonQueryAsync | | exec/execute | ExecuteReaderAsync* | | other | ExecuteReaderAsync |
*Stored procedures with output parameters are executed using ExecuteNonQueryAsync, see examples below
Options
| Option | Usage |
| ------------------ | -------------------- |
| connectionString
| Required. Use environment variable or input option |
| source
| Optional if no other options are specified |
| commandTimeout
| Optional |
Simple queries without options
npm install edge-js
npm install edge-sql
You can set your SQL connection string using environment variable. For passing connection string as an option see Using options.
set EDGE_SQL_CONNECTION_STRING=Data Source=localhost;Initial Catalog=Northwind;Integrated Security=True
Simple select
const edge = require('edge-js');
var getTop10Products = edge.func('sql', function () {/*
select top 10 * from Products
*/});
getTop10Products(null, function (error, result) {
if (error) throw error;
console.log(result);
});
Parameterized queries
You can construct a parameterized query once and provide parameter values on a per-call basis:
SELECT
const edge = require('edge-js');
var getProduct = edge.func('sql', function () {/*
select * from Products
where ProductId = @myProductId
*/});
getProduct({ myProductId: 10 }, function (error, result) {
if (error) throw error;
console.log(result);
});
UPDATE
const edge = require('edge-js');
var updateProductName = edge.func('sql', function () {/*
update Products
set ProductName = @newName
where ProductId = @myProductId
*/});
updateProductName({ myProductId: 10, newName: 'New Product' }, function (error, result) {
if (error) throw error;
console.log(result);
});
Using options
Passing options to function
const edge = require('edge-js');
var select = edge.func('sql', {
source: 'select top 10 * from Products',
connectionString: 'SERVER=myserver;DATABASE=mydatabase;Integrated Security=SSPI',
commandTimeout: 100
});
select(null, function (error, result) {
if (error) throw error;
console.log(result);
});
Select with multiple results
const edge = require('edge-js');
var select = edge.func('sql', {
source: 'select top 5 * from Authors; select top 5 * from Books',
connectionString: 'SERVER=myserver;DATABASE=mydatabase;Integrated Security=SSPI',
commandTimeout: 100
});
select(null, function (error, result) {
if (error) throw error;
console.log(result);
});
Result
{
Authors: [
{ Id: 1, Name: 'Author - 1', Country: 'Country - 1' },
{ Id: 2, Name: 'Author - 2', Country: 'Country - 2' },
{ Id: 3, Name: 'Author - 3', Country: 'Country - 3' },
{ Id: 4, Name: 'Author - 4', Country: 'Country - 4' },
{ Id: 5, Name: 'Author - 5', Country: 'Country - 5' }
],
Books: [
{ Id: 1, Author_id: 485, Price: 64, Edition: 9 },
{ Id: 2, Author_id: 310, Price: 53, Edition: 8 },
{ Id: 3, Author_id: 138, Price: 86, Edition: 3 },
{ Id: 4, Author_id: 88, Price: 62, Edition: 5 },
{ Id: 5, Author_id: 165, Price: 91, Edition: 2 }
]
}
Stored proc with input parameters
const edge = require('edge-js');
var params = {inputParm1: 'input1', inputParam2: 25};
var execProc = edge.func('sql', {
source: 'exec myStoredProc',
connectionString: 'SERVER=myserver;DATABASE=mydatabase;Integrated Security=SSPI'
});
execProc(params, function (error, result) {
if (error) throw error;
console.log(result);
});
Stored proc with output parameters
Example SQL
CREATE Table Authors
(
Id int identity primary key,
Name nvarchar(50),
Country nvarchar(50)
)
CREATE PROCEDURE GetAuthorDetails
(
@AuthorID INT,
@Name NVARCHAR(100) OUTPUT,
@Country NVARCHAR(100) OUTPUT
)
AS
BEGIN
SELECT @Name = Name, @Country = Country
FROM Authors WHERE Id = @AuthorID
END
Javascript
- Return parameter names must start with @returnParam
- Return parameter values must correspond to stored proc output names
- Return parameters will be treated as nvarchar(max)
- Result will return stored proc output names
const edge = require('edge-js');
var execProc = edge.func('sql', {
source: 'exec GetAuthorDetails',
connectionString: 'SERVER=myserver;DATABASE=mydatabase;Integrated Security=SSPI'
});
execProc({ AuthorID: 1, '@returnParam1': 'Name', '@returnParam2': 'Country' }, function (error, result) {
if (error) throw error;
console.log(result);
});
Result
{ Name: 'Author - 1', Country: 'Country - 1' }