عملیات CRUD با استفاده از NodeJS درSQL Server
سه شنبه 14 دی 1395ما در این مقاله به بررسی چگونگی انجام عملیات CRUD در SQL Server با استفاده از NodeJS خواهیم پرداخت . در ادامه مثال هایی را ارائه خواهیم داد و برای فهم بیشتر مثال ها آنها را بصورت مرحله به مرحله شرح خواهیم داد .
همانطور که میدانید ، 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
- 3k بازدید
- 8 تشکر