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

سه شنبه 14 دی 1395

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

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

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

در صورتی که به یادگیری اصولی و حرفه ای این تکنولوژی قدرتمند علاقمند هستید میتوانید دوره کامل و جامع آموزش Node Js موجود در سایت تاپ لرن را مشاهده کنید .


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


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

آموزش نصب sql server 2017

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید