فعال سازی عملیات CRUD در Kendo UI Grid
$("#grid").kendoGrid({ // ... columns: [ { field: "Your Field", title: "Your Field Name", width: "20%", editor: function (container, options) { $('<textarea cols="20" rows="4" data-bind="value: ' + options.field + '"></textarea>').appendTo(container); } }, // ... ] // ... });
PdfRpt-2.3.rar
- Fixed printSummary to show Unicode RTL data. - Improved CellCreated event to work with summary rows. See 'AccountingBalanceColumnPdfReport.cs' sample for more info. - Updated the project to use iTextSharp 5.4.5.
در EF 6 نسخه بتا، متدی اضافه شده به نام AddRange که افزودن تعداد زیادی رکورد رو سهولت بخشیده
INSERTing many rows with Entity Framework 6 beta 1 and SQL Server Compact
دوره 3 ساعته PostgreSQL
PostgreSQL Tutorial Full Course 2022
I provide here in this PostgreSQL tutorial a full course you can use to master PostgreSQL. Postgres is an object relational database that is just as fast as MySQL that adheres more closely to SQL standards and excels at concurrency. Postgres is also superior at avoiding data corruption.
TABLE OF CONTENTS
00:00 Intro
00:30 Why Use Postgres?
01:13 What is a Database
03:12 Change Database Theme
03:53 Create a Database
04:46 Design a Database
05:50 Turn Invoice into a Database
07:04 Make a Table
12:13 Data Types
16:36 Adding Data to Table
18:15 To See Data
18:25 SELECT
19:19 Create Custom Type
20:48 Change Column Data Type
22:58 Thinking About Tables
25:37 Breaking Up Tables
27:03 Primary & Foreign Keys
32:40 Foreign & Primary Keys
33:28 Altering Tables Many Examples
53:00 Getting Data from One Table
53:40 Where
54:30 Conditional Operators
55:48 Logical Operators
58:12 Order By
59:32 Limit
1:01:45 GROUP BY
1:03:11 Distinct
1:05:00 Getting Data from Multiple Tables
1:05:21 Inner Join
1:08:50 Join 3 Tables
1:13:15 Arithmetic Operators
1:13:45 Join with Where
1:14:55 Outer Joins
1:17:03 Cross Joins
1:18:16 Unions
1:19:27 Extract
1:21:05 IS NULL
1:22:03 SIMILAR LIKE & ~
1:29:25 GROUP BY
1:31:14 HAVING
1:32:18 AGGREGATE FUNCTIONS
1:34:22 WORKING WITH VIEWS
1:45:01 SQL Functions
1:49:00 Dollar Quotes
1:50:06 Functions that Return Void
1:52:38 Get Maximum Product Price
1:53:39 Get Total Value of Inventory
1:54:26 Get Number of Customers
1:56:15 Named Parameters
2:01:30 Return a Row / Composite
2:03:38 Get Multiple Rows
2:07:08 PL/pgSQL
2:11:35 Variables in Functions
2:15:55 Store Rows in Variables
2:19:17 IN INOUT and OUT
2:21:01 Using Multiple Outs
2:25:56 Return Query Results
2:33:42 IF ELSEIF and ELSE
2:38:48 CASE Statement
2:42:01 Loop Statement
2:45:20 FOR LOOP
2:48:34 Result Sets, Blocks & Raise Notice
2:51:11 For Each and Arrays
2:53:20 While Loop
2:54:54 Continue
3:01:34 Stored Procedures
3:09:35 Triggers
3:29:25 Cursors
3:39:45 Installation
نحوه استفاده از این کامپوننت به این شکل هست:
1- تعریف ستونها:
const columns = [ { field: "fullname", headerName: "First & last Name", description: "name of user", width: 50, }, { field: "age", headerName: "Age", description: "age of user", width: 50, renderCell:(info)=><strong>Age is : {info.data.age}</strong> } ]
2- تعریف استیتهای لازم برا ست کردن سطر ها، لودر، تعداد کل, شماره صفحه و بزرگی هر صفحه(دقت شود که امکان استفاده بدون پیجینگ هم وجود دارد و امکانات کامل را در لینک لایبرری میتوانید مطالعه نمایید)
... const [rows,setRows] = useState([]); const [loading,setLoading] = useState(false); const [totalCount,setTotalCount] = useState(0);
const [filter,setFilter] = useState({ pageSize:10, pageNumber:1 });
const _fetchData = async () => { if (!active) return; //mock api, you can call your api then set data to table like commented line below return new Promise((resolve) => { setLoading(true); setTimeout(() => { setRows(data);// SetRows, note that data comes from api and must be array of objects setTotalCount(7);//=== set total page size for pagination part resolve(); setLoading(false); }, 2000); }); }
import Angrid from "rect-angrid"; ... _handlePageChange = (newPage)=>{ setFilter(p=>({...p,pageNumber:newPage})) } ... <AnGrid loading={loading} columns={columns} rows={rows} showRowNumber={true} pageSize={filter.pageSize} pageNumber={filter.pageNumber} totalCount={totalCount} onPageChange={_handlePageChange} theme="dark" minHeight={300} emptyList={<strong>There Is No Info</strong>} />
امکانات بیشتر و بهینه تر برای EF
این ابزار در نسخه رایگان شامل قابلیتهای batch، کش، بهینه سازی و ... میباشد.
EF Include
var orders = ctx.Orders .Where(x => x.OrderId == myOrderID) // 1 orders, 20 columns .Include(x => x.Items) // 20 items, 10 columns .Include(x => x.DeliveredItems) // 10 items, 10 columns .ToList(); // return 20 + 10 = 30 rows // return 20 + 10 + 10 = 40 columns // total: 30 rows * 40 columns = 1200 cells transferred
EF+ IncludeOptimized
// SELECT * FROM Order WHERE.... // SELECT * FROM OrderItem WHERE EXISTS (/* previous query */) AND ... // SELECT * FROM DeliveryItems WHERE EXISTS (/* previous query */) AND ... var orders = ctx.Orders .Where(x => x.OrderId == myOrderID) // 1 orders, 20 columns .IncludeOptimized(x => x.Items) // 20 items, 10 columns .IncludeOptimized(x => x.DeliveredItems) // 10 items, 10 columns .ToList(); // return 1 row * 20 columns = 20 cells // return 20 rows * 10 columns = 200 cells // return 10 rows * 10 columns = 100 cells // total: 20 + 200 + 100 = 320 cells transferred
در این قسمت بر روی تابع Filter در MDX Query ها تمرکز خواهیم کرد. برای آشنایی با این تابع یک سری از کوئریها را اجرا کرده و به بررسی آنها میپردازیم.
Select { [Measures].[Internet Sales Amount], [Measures].[Reseller Sales Amount] } on columns, [Product].[Product Categories].[Category] on rows From [Adventure Works]
دقت کنید که در واکشی، مقدار فروش اینترنتی Component برابر Null میباشد.
Select { [Measures].[Internet Sales Amount], [Measures].[Reseller Sales Amount] } on columns, filter( [Product].[Product Categories].[Category], [Measures].[Internet Sales Amount] > 0 ) on rows From [Adventure Works]
با توجه به شرطی که اعمال شده است، فقط دسته بندی محصولاتی در خروجی می آید که فروش اینترنتی آنها بیشتر از صفر یا برابر Null نباشند.
استفاده از کلید واژه ی Having در هر محور کاری شبیه به انجام عمل فیلترینگ می باشد .
Select { [Measures].[Internet Sales Amount], [Measures].[Reseller Sales Amount] } on columns, [Product].[Product Categories].[Category] having [Measures].[Internet Sales Amount] > 0 on rows From [Adventure Works]
اگر بخواهیم میزان فروش اینترنتی و میزان فروش نمایندگان فروش را برای محصولاتی واکشی کنیم که میزان فروش اینترنتی آنها بیش از 500000 دلار میباشد ، کوئری زیر را خواهیم داشت :
Select { [Measures].[Internet Sales Amount], [Measures].[Reseller Sales Amount] } on columns, filter( [Product].[Product Categories].[Category], [Measures].[Internet Sales Amount] > 500000 ) on rows From [Adventure Works]
و برای ایجاد شرط ترکیبی بر روی شاخص، به صورت زیر عمل خواهیم کرد :
Select { [Measures].[Internet Sales Amount], [Measures].[Reseller Sales Amount] } on columns, filter( [Product].[Product Categories].[Category], [Measures].[Internet Sales Amount] > 500000 and [Measures].[Internet Sales Amount] < 750000 ) on rows From [Adventure Works]
در مثال بالا، دسته بندی محصولاتی در خروجی واکشی شده اند که میزان فروش اینترنتی آنها بیش از 500 هزار و کمتر از 750 هزار میباشد.
استفاده از And , Or در شروط ترکیبی مجاز میباشد
Select { [Measures].[Internet Sales Amount], [Measures].[Reseller Sales Amount] } on columns, filter( [Product].[Product Categories].[Category], [Measures].[Internet Sales Amount] > 750000 or [Measures].[Internet Sales Amount] < 500000 ) on rows From [Adventure Works]
در زیر با استفاده از And، شرط برروی میزان فروش نمایندگان فروش نیز قرارداده شده است.
Select { [Measures].[Internet Sales Amount], [Measures].[Reseller Sales Amount] } on columns, filter( [Product].[Product Categories].[Category], ( [Measures].[Internet Sales Amount] > 750000 or [Measures].[Internet Sales Amount] < 500000 ) and [Measures].[Reseller Sales Amount] < 15000000 ) on rows From [Adventure Works]
در هنگام ایجاد شروط ترکیبی حتما از () استفاده کنید .
حال میخواهیم دو شاخص در یک ردیف، با یکدیگر مقایسه شوند و در صورت صحت شرط، آن ردیف در خروجی قرار گیرد
Select { [Measures].[Internet Sales Amount], [Measures].[Reseller Sales Amount] } on columns, filter( [Product].[Product Categories].[Category], [Measures].[Internet Sales Amount] > [Measures].[Reseller Sales Amount] ) on rows From [Adventure Works]
ایجاد فیلترینگ با استفاده از currentmember و عملگر Is .
Select { [Measures].[Internet Sales Amount], [Measures].[Reseller Sales Amount] } on columns, filter( [Product].[Product Categories].[Category], [Product].[Product Categories].currentmember is [Product].[Product Categories].[Category].[Bikes] ) on rows From [Adventure Works]
البته در مثال بالا می توانیم به جای استفاده از Is از = استفاده کنیم. تا اینجا عمل Filtering برروی شاخصها انجام شده است. اما امکان اعمال Filter روی Dimension ها نیز وجود دارد.
کوئری زیر را بررسی کنید :
Select { [Measures].[Internet Sales Amount], [Measures].[Reseller Sales Amount] } on columns, filter( [Product].[Product Categories].[Category], [Product].[Product Categories].currentmember is [Product].[Product Categories].[Category].[Bikes] or [Product].[Product Categories].currentmember is [Product].[Product Categories].[Category].[Accessories] ) on rows From [Adventure Works]
در کوئری بالا میزان فروش نمایندگان فروش و فروش اینترنتی برای دسته بندیهای Bike و Accessories واکشی شده است.
امکان ایجاد شرایط ترکیبی از شاخصها و بعدها در یک Filter نیز وجود دارد.
Select { [Measures].[Internet Sales Amount], [Measures].[Reseller Sales Amount] } on columns, filter( [Product].[Product Categories].[Category], ( [Product].[Product Categories].currentmember is [Product].[Product Categories].[Category].[Bikes] and [Measures].[Reseller Sales Amount] > 1000000 ) or ( [Product].[Product Categories].currentmember is [Product].[Product Categories].[Category].[Accessories] ) and [Measures].[Reseller Sales Amount] > 750000 )on rows From [Adventure Works]
همچنین میتوان از Not درون شرط Filter استفاده کرد
Select { [Measures].[Internet Sales Amount], [Measures].[Reseller Sales Amount] } on columns, filter( [Product].[Product Categories].[Category], not ( [Product].[Product Categories].currentmember is [Product].[Product Categories].[Category].[Clothing] ) ) on rows From [Adventure Works]
در زیر میخواهیم به بررسی تابع non Empty بپردازیم . برای این منظور در ابتدا کوئری زیر را اجرا کنید :
Select { [Measures].[Internet Sales Amount], [Measures].[Reseller Sales Amount] } on columns, [Product].[Product Categories].[Subcategory] on rows From [Adventure Works]
با استفاده از تابع Non Empty، ردیف ها یا ستون هایی حذف می گردند که تمامی مقادیر آنها ، در آن ردیف یا در آن ستون برابر Null باشند.
Select { [Measures].[Internet Sales Amount], [Measures].[Reseller Sales Amount] } on columns, non empty [Product].[Product Categories].[Subcategory] on rows From [Adventure Works]
1- اندازه گیری تعداد Transactionها در واحد زمان روی یک Database خاص در SQL Server
جهت بدست آوردن تعداد Transactionها در واحد زمان( Transactions Per Second ) روی یک Database خاص در یک سیستم عملیاتی، جهت ارتقاء سخت افزاری ، تست فشار و ... میتوانید از یک DMV با نام sys.dm_os_performance_counters به طریق زیر استفاده نمائید:declare @cntr_value bigint Select @cntr_value=cntr_value from sys.dm_os_performance_counters where instance_name='AdventureWorks' and counter_name='Write Transactions/sec' /* ایجاد یک تاخیر مثلاً یک ثانیه */ waitfor delay '00:00:01' Select cntr_value -@cntr_value from sys.dm_os_performance_counters where instance_name='AdventureWorks' and counter_name='Write Transactions/sec'
2- sys.sp_MSforeachtable
از رویههای ذخیره شده UnDocumented در SQL Server میباشد و این قابلیت را دارا است که برای هر یک از جداول موجود در یک بانک اطلاعاتی، یک رویهای را اجرا کند. برای مثال با استفاده از دستور زیر، میتوانید تعداد سطرها، اندازهی دادهها و ایندکسهای یک جدول را بدست آورید
EXEC sys.sp_MSforeachtable 'sp_spaceused ''?''';
USE [AdventureWorksDW2008R2] GO CREATE TABLE #TableSpaceUsed( [name] [nvarchar](120) NULL, [rows] [nvarchar](120) NULL, [reserved] [nvarchar](120) NULL, [data] [nvarchar](120) NULL, [index_size] [nvarchar](120) NULL, [unused] [nvarchar](120) NULL ) ON [PRIMARY] Insert Into #TableSpaceUsed EXEC sys.sp_MSforeachtable 'sp_spaceused ''?'''; Select * from #TableSpaceUsed Order by CAST([rows] as int) desc Drop table #TableSpaceUsed