简体   繁体   English

通过存储过程插入记录不起作用(使用乏味的MS SQL驱动程序)

[英]Inserting Records via Stored Procedure Not Working (using Tedious MS SQL Driver)

I am working on an app. 我正在开发一个应用程序。 which has to insert records at an avg. 必须在平均位置插入记录。 rate of ~900 records/sec. 约900条记录/秒的速率。
For this I am trying to build a console app based off TCP which listens for clients connecting to the server using Node.JS as my platform. 为此,我试图基于TCP构建一个控制台应用程序,该应用程序侦听使用Node.JS作为平台连接到服务器的客户端。

I am firing a stored procedure to insert static text (in table) as a parameter to the SP but its not working and no error(s) are caught. 我正在射击一个存储过程,以将静态文本(在表中)作为SP的参数插入,但它不起作用,并且未捕获任何错误。

Can anyone pls help me out with this? 有人可以帮我这个忙吗? am new to node.js 是node.js的新手

My server side app: 我的服务器端应用程序:

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

var HOST = '127.0.0.1';
var PORT = 7000;
var timeout = 420000; // msec - *420000 

//db conn config
var config = {
  server: '192.168.0.57',
  userName: 'sa',
  password: 'sa',
  options: {
    database: "NodeJSBenchmark",
  }
 };
var lg = function(message) {
    console.log(message);
};

var server = net.createServer();
var connection = new Connection(config);

server.on('listening', function() {
    lg('Server listening on ' + HOST +':'+ PORT);
});

server.on('connection', function(sock) {
    sock.setTimeout(timeout, function() {
        try {
            sock.end();
        }
        catch(x) {
            lg('on end' + x);
        }
    });

    function executeStatement() {
    //var storedProcName = '[NodeJSBenchmark].[dbo].[spINSERTsockdata]';
    var storedProcName = 'spINSERTsockdata';
    var request = new Request(storedProcName, function(err, rowCount) {
    if(err){
      lg('Error on insert' + err);
    }
    else {
      lg(rowCount + ' rows2');
      lg('SP fininshed running..');
  }
    connection.close();
  });

  request.addParameter('sockdata', TYPES.VarChar, 'ping'); 

  request.on('doneProc', function(rowCount, more, returnStatus) {
    lg('Rows Changed: ' + rowCount + 'Return Stat: ' + returnStatus);  
  });

  connection.callProcedure(request);
  }

    sock.setNoDelay(true);

    //sock.setEncoding('ascii');

    // Identify incoming client
    sock.name = sock.remoteAddress + ":" + sock.remotePort 

    sock.on('data', function(data) {
        try {
        //lg("CONNECTED: "+sock.name);
        //lg("INCOMING DATA: "+data);
        sock.write(data);

        connection.on('connect', function(err) {
        // If conn is active; hit db..
        executeStatement();
        });

        }
        catch(x) {
            lg(x);
        }
    });

    sock.on('end', function(data) {
        try {
            sock.end();
        }
        catch(x) {
            lg('on end' + x);
        }
    });

    sock.on('error', function(err) {
        lg(err);
    });

    sock.on('close', function(data) {

        try {
            sock.end();
        }
        catch(x) {
            lg(x);
        }

        try {
            sock.destroy();
        }
        catch(x) {
            lg('on close' + x);
        }
    });

    sock.on('timeout', function() {
    });

});

server.on('error', function(err) {
});

server.on('close', function() {
});

server.listen(PORT, HOST);

SP: SP:

USE [NodeJSBenchmark]
GO
/****** Object:  StoredProcedure [dbo].[spINSERTsockdata]    Script Date: 9/5/2013 4:16:19 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:      <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
ALTER PROCEDURE [dbo].[spINSERTsockdata] @sockdata varchar(10)

AS

SET NOCOUNT ON

INSERT INTO [dbo].[tblSockData]
           ([inbound])
     VALUES
           (@sockdata)

Please try adding following code : 请尝试添加以下代码:
var TYPES = require('tedious').TYPES;
Since with the code given TYPES undefined 由于使用给定的代码TYPES未定义


Make Sure TCP/IP is enable for SQL Follow the steps: 确保为SQL启用了TCP / IP,请执行以下步骤:

  • Run SQL Server Configuration Manager. 运行SQL Server配置管理器。

  • Go to SQL Server Network Configuration > Protocols for SQLEXPRESS. 转到“ SQL Server网络配置”>“ SQLEXPRESS的协议”。

  • Make sure TCP/IP is enabled. 确保已启用TCP / IP。

Then right-click on TCP/IP and select Properties, verify that under IP2, the IP Address is set to the computer's IP address on the local subnet, Make sure that TCP Dynamic Ports is blank & Make sure that TCP Port is set to 1433. (Tedious by default tries on this port) 然后右键单击“ TCP / IP”并选择“属性”,确认在IP2下,“ IP地址”已设置为本地子网上的计算机IP地址,请确保“ TCP动态端口”为空白,并确保“ TCP端口”设置为1433。 (默认情况下,乏味尝试此端口)


Following is the code which is working for me (TESTED) 以下是对我有用的代码 (已测试)

 var net = require('net'); var fs = require('fs'); var TYPES = require('tedious').TYPES; var Connection = require('tedious').Connection; var Request = require('tedious').Request; var HOST = '127.0.0.1'; var PORT = 7000; var timeout = 420000; // msec - *420000 //db conn config var config = { server: '127.0.0.1', userName: 'sa', password: '12345', options: { database: "NodeJSBenchmark", instanceName : "SQLEXPRESS" } }; var lg = function(message) { console.log(message); }; var server = net.createServer(); var connection = new Connection(config); connection.on('connect', function (err) { if (err) { return console.log('Error connecting:\\t' + err); } else { console.log('CONNECTED TO MS-SQL'); } }); connection.on('errorMessage', function (err) { if (err) { return console.log('Error connecting 2:\\t' + JSON.stringify(err)); } }); connection.on('infoMessage', function (info) { if (err) { return console.log('Information:\\t' + JSON.stringify(info)); } }); server.on('listening', function() { lg('Server listening on ' + HOST +':'+ PORT); }); server.on('connection', function (sock) { sock.setTimeout(timeout, function () { try { sock.end(); } catch (x) { lg('on end' + x); } }); function executeStatement() { //var storedProcName = '[NodeJSBenchmark].[dbo].[spINSERTsockdata]'; var storedProcName = 'spINSERTsockdata'; var request = new Request(storedProcName, function (err, rowCount) { if (err) { lg('Error on insert' + err); } else { lg(rowCount + ' rows2'); lg('SP fininshed running..'); } connection.close(); }); request.addParameter('sockdata', TYPES.VarChar, 'ping'); request.on('doneProc', function (rowCount, more, returnStatus) { lg('Rows Changed: ' + rowCount + 'Return Stat: ' + returnStatus); }); connection.callProcedure(request); } sock.setNoDelay(true); //sock.setEncoding('ascii'); // Identify incoming client sock.name = sock.remoteAddress + ":" + sock.remotePort sock.on('data', function (data) { try { //lg("CONNECTED: "+sock.name); //lg("INCOMING DATA: "+data); sock.write(data); executeStatement(); } catch (x) { lg(x); } }); sock.on('end', function (data) { try { sock.end(); } catch (x) { lg('on end' + x); } }); sock.on('error', function (err) { lg(err); }); sock.on('close', function (data) { try { sock.end(); } catch (x) { lg(x); } try { sock.destroy(); } catch (x) { lg('on close' + x); } }); sock.on('timeout', function () { }); }); server.on('error', function(err) { }); server.on('close', function() { }); server.listen(PORT, HOST); 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 使用雪花中的存储过程将值插入表中 - Inserting values into a table using stored procedure in snowflake 插入查询不通过雪花中的 javascript 过程插入记录 - Insert Query not inserting records via javascript procedure in snowflake 动态 SQL 使用 Snowflake SQL 存储过程 - Dynamic SQL using Snowflake SQL Stored Procedure SQL 在数据库中插入空记录 - 使用 JavaScript - SQL inserting empty records in database - using JavaScript 在雪花中使用合并将存储过程的参数插入表中 - Inserting parameters of stored procedure into a table using Merge in snowflake 使用存储过程执行时executeUpdate()不起作用 - executeUpdate() is no working while execute using stored procedure 无法使用繁琐的 Node.js 连接到 SQL 服务器 - Cannot Connect to SQL Server using tedious Node.js 尝试使用繁琐的连接和 Windows 身份验证连接到 SQL 服务器? - Trying to connect to SQL server using Tedious Connection and Windows Authentication? 在客户端通过javascript调用存储过程? - Call a stored procedure via javascript on the client side? 使用 node.js 在 sql 服务器数据库中一次插入多条记录时遇到麻烦 - Having troubles inserting multiple records at once without using for loop in sql server database using node.js
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM