عملیات CRUD با استفاده از NodeJS درSQL Server

ما در این مقاله به بررسی چگونگی انجام عملیات CRUD در SQL Server با استفاده از NodeJS خواهیم پرداخت . در ادامه مثال هایی را ارائه خواهیم داد و برای فهم بیشتر مثال ها آنها را بصورت مرحله به مرحله شرح خواهیم داد .

عملیات CRUD با استفاده از NodeJS درSQL Server

همانطور که میدانید ، NodeJS یک محیط Run-Time ساخته شده بر روی Chrome’s V8 JavaScript engine برای سمت سرور و برنامه های شبکه ای می باشد . و این یک Open Source است که از Platformهای مختلف نیز پشتیبانی میکند . برنامه های NodeJs با JvaScript نوشته میشوند . 

Background :

زمانی بود که توسعه دهندگان برای انجام عملیات های سمت سرور وابسته به زبان سمت سرور بودند . چندین سال قبل ، شرکتی با نام Joyent ، راه حلی را برای این مسئله ارائه داد . بدین صورت که ، ما در صورت داشتن اطلاعات در مورد javaScript میتوانیم عملیات های سمت سرور را انجام دهیم ، چون یک ایده شگفت انگیز پشت این راه حل بود . موفقیت شگرفی می شد . شما قادر به انجام عملیات های سمت سرور بودید بدون اینکه وابسته به زبان های سمت سروری همچون #C و PHP باشید . در این مقاله ما عملیات CRUD در SQL Server را با استفاده از NodeJS در سمت سرور بررسی خواهیم کرد . امیدواریم که مورد پسند شما واقع شود . 

ابزار NodeJS برای Visual Studio :

شما همیشه قادر به اجرای کدهای NodeJs توسط Cmd هستید ، بنابراین انجام تنظیمات این قسمت اختیاری است . اگر شما آن را نصب کردید ، شما به راحتی قادر به Debug و توسعه NodeJS هستید ، پس توصیه ی ما به شما نصب این است . 

برای دانلود این ابزار اینجا کلیک کنید ، بعد از اتمام دانلود ، عملیات نصب آن را شروع کنید . 



بعد از نصب ، یک برنامه NodeJS در Visual Studio خود ایجاد میکنیم . 

ایجاد یک NodeJS Application در Visual Studio :

با توجه به تصویر زیر Application را ایجاد کنید :


حال Visula Studio برای نوشتن کد آماده است ، اما همانطور که بیشتر گفتیم ، ما از SQL Server برای پایگاه داده خود استفاده میکنیم . پس ما نیاز به یکسری پیکربندی مرتبط با آن را داریم . 

پیکربندی SQL Server برای توسعه NodeJS :

از Run بودن سرویس های زیر اطمینان حاصل فرمایید :

• SQL Server
• SQL Server Agent
• SQL Server Browser


برای بررسی سرویس های فوق ، میتوانید دستور services.msc را در Run Command Windows وارد کنید . حال به SQL Server Configuration Manager بروید ، به احتمال زیاد شما میتوانید این را در C:\Windows\SysWOW64  پیدا کنید یا اینکه در start جستجو کنید . 





حال ، به SQL Server Network Configuration  بروید و روی Protocols for SQLEXPRESS کلیک کنید و TCP/IP را فعال کنید . 

حال روی آن راست کلیک کرده و به Properties TCP/IP بروید . به IP Address رفته و Port ای را به همه IPها تخصیص دهید . 

اگر شما این را انجام دادید ، حال زمان آن است که پایگاه داده خود را تنظیم کنید و مقداری داده در آن وارد کنید . توجه داشته باشید که Restart کردن سرویس را فراموش نکنید . 

ایجاد پایگاه داده :

در این قسمت پایگاه داده ای با نام TrialDB ایجاد خواهیم کرد . شما همیشه با اجرا کردن کوئری زیر قادر به ایجاد یک پایگاه داده هستید :

USE [master]
GO

/****** Object:  Database [TrialDB]    Script Date: 20-11-2016 03:54:53 PM ******/
CREATE DATABASE [TrialDB]
 CONTAINMENT = NONE
 ON  PRIMARY 
( NAME = N'TrialDB', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL13.SQLEXPRESS\MSSQL\DATA\TrialDB.mdf' , _
SIZE = 8192KB , MAXSIZE = UNLIMITED, FILEGROWTH = 65536KB )
 LOG ON 
( NAME = N'TrialDB_log', _
FILENAME = N'C:\Program Files\Microsoft SQL Server\
MSSQL13.SQLEXPRESS\MSSQL\DATA\TrialDB_log.ldf' , _
SIZE = 8192KB , MAXSIZE = 2048GB , FILEGROWTH = 65536KB )
GO

ALTER DATABASE [TrialDB] SET COMPATIBILITY_LEVEL = 130
GO

IF (1 = FULLTEXTSERVICEPROPERTY('IsFullTextInstalled'))
begin
EXEC [TrialDB].[dbo].[sp_fulltext_database] @action = 'enable'
end
GO

ALTER DATABASE [TrialDB] SET ANSI_NULL_DEFAULT OFF 
GO

ALTER DATABASE [TrialDB] SET ANSI_NULLS OFF 
GO

ALTER DATABASE [TrialDB] SET ANSI_PADDING OFF 
GO

ALTER DATABASE [TrialDB] SET ANSI_WARNINGS OFF 
GO

ALTER DATABASE [TrialDB] SET ARITHABORT OFF 
GO

ALTER DATABASE [TrialDB] SET AUTO_CLOSE OFF 
GO

ALTER DATABASE [TrialDB] SET AUTO_SHRINK OFF 
GO

ALTER DATABASE [TrialDB] SET AUTO_UPDATE_STATISTICS ON 
GO

ALTER DATABASE [TrialDB] SET CURSOR_CLOSE_ON_COMMIT OFF 
GO

ALTER DATABASE [TrialDB] SET CURSOR_DEFAULT  GLOBAL 
GO

ALTER DATABASE [TrialDB] SET CONCAT_NULL_YIELDS_NULL OFF 
GO

ALTER DATABASE [TrialDB] SET NUMERIC_ROUNDABORT OFF 
GO

ALTER DATABASE [TrialDB] SET QUOTED_IDENTIFIER OFF 
GO

ALTER DATABASE [TrialDB] SET RECURSIVE_TRIGGERS OFF 
GO

ALTER DATABASE [TrialDB] SET  DISABLE_BROKER 
GO

ALTER DATABASE [TrialDB] SET AUTO_UPDATE_STATISTICS_ASYNC OFF 
GO

ALTER DATABASE [TrialDB] SET DATE_CORRELATION_OPTIMIZATION OFF 
GO

ALTER DATABASE [TrialDB] SET TRUSTWORTHY OFF 
GO

ALTER DATABASE [TrialDB] SET ALLOW_SNAPSHOT_ISOLATION OFF 
GO

ALTER DATABASE [TrialDB] SET PARAMETERIZATION SIMPLE 
GO

ALTER DATABASE [TrialDB] SET READ_COMMITTED_SNAPSHOT OFF 
GO

ALTER DATABASE [TrialDB] SET HONOR_BROKER_PRIORITY OFF 
GO

ALTER DATABASE [TrialDB] SET RECOVERY SIMPLE 
GO

ALTER DATABASE [TrialDB] SET  MULTI_USER 
GO

ALTER DATABASE [TrialDB] SET PAGE_VERIFY CHECKSUM  
GO

ALTER DATABASE [TrialDB] SET DB_CHAINING OFF 
GO

ALTER DATABASE [TrialDB] SET FILESTREAM( NON_TRANSACTED_ACCESS = OFF ) 
GO

ALTER DATABASE [TrialDB] SET TARGET_RECOVERY_TIME = 60 SECONDS 
GO

ALTER DATABASE [TrialDB] SET DELAYED_DURABILITY = DISABLED 
GO

ALTER DATABASE [TrialDB] SET QUERY_STORE = OFF
GO

USE [TrialDB]
GO

ALTER DATABASE SCOPED CONFIGURATION SET MAXDOP = 0;
GO

ALTER DATABASE SCOPED CONFIGURATION FOR SECONDARY SET MAXDOP = PRIMARY;
GO

ALTER DATABASE SCOPED CONFIGURATION _
SET LEGACY_CARDINALITY_ESTIMATION = OFF;
GO

ALTER DATABASE SCOPED CONFIGURATION FOR _
SECONDARY SET LEGACY_CARDINALITY_ESTIMATION = PRIMARY;
GO

ALTER DATABASE SCOPED CONFIGURATION SET PARAMETER_SNIFFING = ON;
GO

ALTER DATABASE SCOPED CONFIGURATION FOR _
SECONDARY SET PARAMETER_SNIFFING = PRIMARY;
GO

ALTER DATABASE SCOPED CONFIGURATION SET QUERY_OPTIMIZER_HOTFIXES = OFF;
GO

ALTER DATABASE SCOPED CONFIGURATION FOR _
SECONDARY SET QUERY_OPTIMIZER_HOTFIXES = PRIMARY;
GO

ALTER DATABASE [TrialDB] SET  READ_WRITE 
GO


ایجاد جدول و وارد کردن داده در آن :

برای ایجاد جدول در پایگاه داده خود میتوانید کوئری زیر را اجرا کنید :

USE [TrialDB]
GO

/****** Object:  Table [dbo].[Course]    Script Date: 20-11-2016 03:57:30 PM ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[Course](
	[CourseID] [int] NOT NULL,
	[CourseName] [nvarchar](50) NOT NULL,
	[CourseDescription] [nvarchar](100) NULL,
 CONSTRAINT [PK_Course] PRIMARY KEY CLUSTERED 
(
	[CourseID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, _
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO


حال ، مقداری داده در آن وارد میکنیم :

USE [TrialDB]
GO

INSERT INTO [dbo].[Course]
           ([CourseID]
           ,[CourseName]
           ,[CourseDescription])
     VALUES
           (1
           ,'C#'
           ,'Learn C# in 7 days')
 INSERT INTO [dbo].[Course]
           ([CourseID]
           ,[CourseName]
           ,[CourseDescription])
     VALUES
           (2
           ,'Asp.Net'
           ,'Learn Asp.Net in 7 days')
INSERT INTO [dbo].[Course]
           ([CourseID]
           ,[CourseName]
           ,[CourseDescription])
     VALUES
           (3
           ,'SQL'
           ,'Learn SQL in 7 days')
INSERT INTO [dbo].[Course]
           ([CourseID]
           ,[CourseName]
           ,[CourseDescription])
     VALUES
           (4
           ,'JavaScript'
           ,'Learn JavaScript in 7 days')
GO


MSSQL - Microsoft SQL Server Client برای NodeJS :

Node-MSSQL :

• برای درایورهای چندگانه TDS دارای Interfaceهای یکپارچه میباشد . 
• دارای Connection pooling از پیش ساخته است . 
• از JSON Serialization که با SQL Server 2016 معرفی شد ، پشتیبانی میکند . 
• از Stored Procedures, Transactions, Prepared Statements, Bulk Load و TVP پشتیبانی میکند . 
•  از serialization of Geography و Geometry CLR پشتیبانی میکند . 
• دارای نوع داده  smart Js برای SQL dataType Mapper می باشد . 
• از Promises, Streams و standard callbacks پشتیبانی میکند . 
• از ES6 tagged template literals پشتیبانی میکند . 
• در محیط محصولات ، تست شده و با ثبات است . 
• Well Documented است .

برای کسب اطلاعات بیشتر در مورد این پکیج میتوانید به این مقاله مراجعه کنید . شما به راحتی میتوانید با اجرا کردن دستور زیر در NuGet Package Manager Console این پکیج را نصب کنید .

npm install mssql



حال با فراخوانی تابع require میتوانیم این پکیج را بارگذاری کنیم . 

//MSSQL Instance Creation
var sqlInstance = require("mssql");


سپس ، پیکربندی پایگاه داده را میتوانید همانند زیر تنظیم کنید :

/Database configuration
var setUp = {
    server: 'localhost',
    database: 'TrialDB',
    user: 'sa',
    password: 'sa',
    port: 1433
};


زمانی که تنظیمات پیکربندی به پایان رسید ، شما با استفاده از تابع ()Connect میتوانید به پایگاه داده متصل شوید . 

sqlInstance.connect(setUp)


حال ، به سراغ عملیات CRUD میرویم . آماده اید ؟!

انتخاب تمامی داده ها در پایگاه داده با استفاده از NodeJS :

// To retrieve all the data - Start
                new sqlInstance.Request()
                    .query("select * from Course")
                    .then(function (dbData) {
                        if (dbData == null || dbData.length === 0)
                            return;
                        console.dir('All the courses');
                        console.dir(dbData);
                    })
                    .catch(function (error) {
                        console.dir(error);
                    });

                // To retrieve all the data - End


حال ، برنامه خود را اجرا کنید و خروجی آن را مشاهده کنید :



انتخاب داده ها از پایگاه داده با شرط Where با استفاده از NodeJS :

شما امکان انتخاب یکسری رکورد خاص را با کوئری Select دارید :

// To retrieve specicfic data - Start
               var value = 2;
               new sqlInstance.Request()
                   .input("param", sqlInstance.Int, value)
                   .query("select * from Course where CourseID = @param")
                   .then(function (dbData) {
                       if (dbData == null || dbData.length === 0)
                           return;
                       console.dir('Course with ID = 2');
                       console.dir(dbData);
                   })
                   .catch(function (error) {
                       console.dir(error);
                   });
               // To retrieve specicfic data - End


خروجی کوئری بالا را در تصویر زیر مشاهده میفرمایید :




وارد کردن داده در پایگاه داده با استفاده از NodeJS :

ما امکان وارد کردن داده در پایگاه داده با استفاده از NodeJS با کوئری insert را داریم . در کد زیر عملیا ت insert را مشاهده میفرمایید :

// Insert data - Start
var dbConn = new sqlInstance.Connection(setUp,
    function (err) {
        var myTransaction = new sqlInstance.Transaction(dbConn);
        myTransaction.begin(function (error) {
            var rollBack = false;
            myTransaction.on('rollback',
                function (aborted) {
                    rollBack = true;
                });
            new sqlInstance.Request(myTransaction)
                .query("INSERT INTO [dbo].[Course] 
                ([CourseName],[CourseDescription]) 
                VALUES ('Node js', 
                'Learn Node JS in 7 days')",
                function (err, recordset) {
                    if (err) {
                        if (!rollBack) {
                            myTransaction.rollback(function (err) {
                                console.dir(err);
                            });
                        }
                    } else {
                        myTransaction.commit().then(function (recordset) {
                            console.dir('Data is inserted successfully!');
                        }).catch(function (err) {
                            console.dir('Error in transaction commit ' + err);
                        });
                    }
                });
        });
    });
// Insert data - End


حال برای مشاهده خروجی برنامه را اجرا میکنیم :




حذف داده ها از پایگاه داده با استفاده از NodeJS :

همانطور که عملیات Insert را انجام دادیم ، delete را انجام میدهیم :

// Delete data - Start
var delValue = 4;
var dbConn = new sqlInstance.Connection(setUp,
    function (err) {
        var myTransaction = new sqlInstance.Transaction(dbConn);
        myTransaction.begin(function (error) {
            var rollBack = false;
            myTransaction.on('rollback',
                function (aborted) {
                    rollBack = true;
                });
            new sqlInstance.Request(myTransaction)
                .query("DELETE FROM [dbo].[Course] 
                WHERE CourseID=" + delValue,
                function (err, recordset) {
                    if (err) {
                        if (!rollBack) {
                            myTransaction.rollback(function (err) {
                                console.dir(err);
                            });
                        }
                    } else {
                        myTransaction.commit().then(function (recordset) {
                            console.dir('Data is deleted successfully!');
                        }).catch(function (err) {
                            console.dir('Error in transaction commit ' + err);
                        });
                    }
                });
        });
    });
// Delete data - End


حال برنامه را اجرا میکنیم :



بروزرسانی کردن یک داده در پایگاه داده با استفاده از NodeJS :

// Update data - Start
var updValue = 3;
var dbConn = new sqlInstance.Connection(setUp,
    function (err) {
        var myTransaction = new sqlInstance.Transaction(dbConn);
        myTransaction.begin(function (error) {
            var rollBack = false;
            myTransaction.on('rollback',
                function (aborted) {
                    rollBack = true;
                });
            new sqlInstance.Request(myTransaction)
                .query("UPDATE [dbo].[Course] SET [CourseName] = 'Test' _
                            WHERE CourseID=" + updValue,
                function (err, recordset) {
                    if (err) {
                        if (!rollBack) {
                            myTransaction.rollback(function (err) {
                                console.dir(err);
                            });
                        }
                    } else {
                        myTransaction.commit().then(function (recordset) {
                            console.dir('Data is updated successfully!');
                        }).catch(function (err) {
                            console.dir('Error in transaction commit ' + err);
                        });
                    }
                });
        });
    });
// Update data - End


خروجی کد بالا بصورت زیر است :

دانلود فایل های ضمیمه مخصوص اعضای سایت می باشد !
کاربر مهمان! جهت دانلود و استفاده از امکانات سایت لطفا وارد سایت شوید و یا ثبت نام کنید
دانلود نسخه ی PDF این مطلب