r00tkit
یک شنبه 25 بهمن 1388, 16:23 عصر
امیدوارم فقط تکراری نباشه!!!!:خجالت:
همه ی ما می دونیم ا ز2005SQLserver به بعد sqlserver توانایی کار با CLR رو داره
این به این معنی هست که ما می تونیم کد هایی در محیط manage بنویسیم ودر sqlserver اجرا کنیم
اولین سوالی که به ذهن همه ی ما خطور می کنه اینه که اصلا چرا نیازی به clr در Sql هست؟؟
بعد اینکه در اینترنت گشتم و مقاله هایی رو خوندم به این نتایج رسیدم:
با استفاده از این ما می تونیم کد های پیچیده رو به راحتی بنویسیم مثلا استفاده از توابع ریاضی پیچیده و توایع باز گشتی
دلیل دیگه این که می تونیم از library های .net استفاده کنیم واز اونجایی که CLR stored procedure کامپایل میشن نسبت به T-SQLکه interpreted هستش سریع تر اجرا می شه ودر جا هایی کد چندین بار اجرا میشه مفید تر خواهد بود
واز همه مهم تر(به نظر من) دیگه از دست syntax سخت راحت می شیم من خیلی از Developer ها رو دیدم که در حد خفن با زبان مورد علاقشون کد می زنن اما در کار با T-SQL خلاقیتشون گم میشه.
من در این مقاله سعی می کنم با یه مثال ساده روش ساختن CLR stored procedure وچگونگی استفادشو توضیح بدم.
ویژال استادیو رو باز کنید روی بخش new project کلیک کنید سپس SQL Server project را از بخش C# انتخواب کنید
و اسم ان رو به LearnCLRIntegrationتغییر بدید. روی پروژتون در بخش solution explorerراست کلیک کرده وسپس Add New Item را انتخواب کنید و یه stored procedure به پروژتون اضافه کنید.
این کار باعث ایجاد یه کلاس و کدهایی داخل ان می شه (code snippiest)
using System;
using System.Data.SqlClient;
using Microsoft.SqlServer.Server;
public class StoredProcedures
{
[Microsoft.SqlServer.Server.SqlProcedure()]
public static void StoredProcedure1()
{
// Connect through the context connection.
using (SqlConnection connection = new SqlConnection("context connection=true"))
{
connection.Open();
SqlCommand command = new SqlCommand(
"SELECT * FROM t" , connection);
// Execute the command and send the results directly to the client.
SqlContext.Pipe.ExecuteAndSend(command);
}
}
}
شما می تونید علاوه بر CLR stored procedure این ها رو هم داشته باشین:SqlFunction, Sqltrigger, SqlMethod, SqlUserDefinedType ...
فکر کنم خودتون فهمیدید این کلاس چیه اما باز!!! این یه کلاسیه که مثل کلاس های دیگه می تونیم توش method های مختلف تعریف کنیم این attributes[Microsoft.SqlServer.Server.SqlProcedure] هست که نوع method رو مشخص می کنه مثلا برای ایجاد trigger از این attribute استفاده می کنیم [Microsoft.SqlServer.Server.SqlTrigger]
ما می تونیم از CLR stored procedure برایdeleteو update ... استفاده کنیم
فکر کنم نیاز به توضیح نداره [Microsoft.SqlServer.Server.SqlProcedure()]
باید از context connection = true به عنوان connection string استفاده کنید این به sqlserver می فهمونه که از همون connection که کد توش اجرا میشه استفاده کنه یعنی وابسته به خود database میشه!!!!!!
The context connection lets you execute Transact-SQL statements in the same context that your code was invoked in the first place. In order to obtain the context connection, you must use the "context connection" connection string keyword
SqlContext.Pipe.ExecuteAndSend(command);
این کد باعث اجرای Command وفرستادن نتیجه به سرویس گیرنده میشه (client)
برنامه رو کامپایل کنید و dll تواید شده رو به یه مسر راحت مثل D:\ کپی کنید (البته این کار دابخواهیه)
توانایی اجرای کدهای CLR به صورت پیش فرض در sqlserveroff هستش برای on کردنش کد زیر رو برای database خودتون اجرا کنید
sp_configure 'clr enabled',1
GO
Reconfigure
البته شما می تونید از SQL Server Surface Area Configurationنیز استفاد کنید
برای ایجاد assembly این کد هارو داخل sqlserver اجرا کنید
CREATE ASSEMBLY LearnCLRIntegration -- Assembly name, you can write which you wantFROM
'd:\your dll name.dll' -- write appropriate path and DLL name
WITH PERMISSION_SET = SAFE
GO
توضیح در کنار کد ها امده
البته با خود Management Studio هم میشه این کار رو کرد در داخل database مسیر زیر رو برید
Programmability=>assemblies=> add managed assembly
برای اجرا باید از assembly یه stored procedure بسازید با کد زیر :
کدش:
CREATE PROC clrsp
AS
EXTERNAL NAME ASSEMBLYNAME.StoredProcedures. StoredProcedure1-- ASSEMBLYNAME. Classname. Function name
ASSEMBLYNAME اسم اسمبلی که قبلا ساختیم
StoredProceduresاسم کلاس داخل اسمبلی
StoredProcedure1
هم اسم تابع ای هست که می خواد کار stored procedure رو انجام بده
حالا همه چیر ردیفِ
Exec clrsp
go
با این کد stored procedure اجرا میشه
به طور خلاصه برای ایجاد CLR Stored Procedure 3 مرحله داریم
1)ایجاد یه تابع static در داخل کلاسی به عنوان Stored Procedure
Register (2کردن اسمبلی با روش های گفته شده
3) ایجاد Stored Procedure از تابع داخل اسمبلی Registerشده و اجرا ان
برای اطلاعات بیشتر به MSDN مراجعه فر مایید
منبع:: :تشویق:wink !!Web
همه ی ما می دونیم ا ز2005SQLserver به بعد sqlserver توانایی کار با CLR رو داره
این به این معنی هست که ما می تونیم کد هایی در محیط manage بنویسیم ودر sqlserver اجرا کنیم
اولین سوالی که به ذهن همه ی ما خطور می کنه اینه که اصلا چرا نیازی به clr در Sql هست؟؟
بعد اینکه در اینترنت گشتم و مقاله هایی رو خوندم به این نتایج رسیدم:
با استفاده از این ما می تونیم کد های پیچیده رو به راحتی بنویسیم مثلا استفاده از توابع ریاضی پیچیده و توایع باز گشتی
دلیل دیگه این که می تونیم از library های .net استفاده کنیم واز اونجایی که CLR stored procedure کامپایل میشن نسبت به T-SQLکه interpreted هستش سریع تر اجرا می شه ودر جا هایی کد چندین بار اجرا میشه مفید تر خواهد بود
واز همه مهم تر(به نظر من) دیگه از دست syntax سخت راحت می شیم من خیلی از Developer ها رو دیدم که در حد خفن با زبان مورد علاقشون کد می زنن اما در کار با T-SQL خلاقیتشون گم میشه.
من در این مقاله سعی می کنم با یه مثال ساده روش ساختن CLR stored procedure وچگونگی استفادشو توضیح بدم.
ویژال استادیو رو باز کنید روی بخش new project کلیک کنید سپس SQL Server project را از بخش C# انتخواب کنید
و اسم ان رو به LearnCLRIntegrationتغییر بدید. روی پروژتون در بخش solution explorerراست کلیک کرده وسپس Add New Item را انتخواب کنید و یه stored procedure به پروژتون اضافه کنید.
این کار باعث ایجاد یه کلاس و کدهایی داخل ان می شه (code snippiest)
using System;
using System.Data.SqlClient;
using Microsoft.SqlServer.Server;
public class StoredProcedures
{
[Microsoft.SqlServer.Server.SqlProcedure()]
public static void StoredProcedure1()
{
// Connect through the context connection.
using (SqlConnection connection = new SqlConnection("context connection=true"))
{
connection.Open();
SqlCommand command = new SqlCommand(
"SELECT * FROM t" , connection);
// Execute the command and send the results directly to the client.
SqlContext.Pipe.ExecuteAndSend(command);
}
}
}
شما می تونید علاوه بر CLR stored procedure این ها رو هم داشته باشین:SqlFunction, Sqltrigger, SqlMethod, SqlUserDefinedType ...
فکر کنم خودتون فهمیدید این کلاس چیه اما باز!!! این یه کلاسیه که مثل کلاس های دیگه می تونیم توش method های مختلف تعریف کنیم این attributes[Microsoft.SqlServer.Server.SqlProcedure] هست که نوع method رو مشخص می کنه مثلا برای ایجاد trigger از این attribute استفاده می کنیم [Microsoft.SqlServer.Server.SqlTrigger]
ما می تونیم از CLR stored procedure برایdeleteو update ... استفاده کنیم
فکر کنم نیاز به توضیح نداره [Microsoft.SqlServer.Server.SqlProcedure()]
باید از context connection = true به عنوان connection string استفاده کنید این به sqlserver می فهمونه که از همون connection که کد توش اجرا میشه استفاده کنه یعنی وابسته به خود database میشه!!!!!!
The context connection lets you execute Transact-SQL statements in the same context that your code was invoked in the first place. In order to obtain the context connection, you must use the "context connection" connection string keyword
SqlContext.Pipe.ExecuteAndSend(command);
این کد باعث اجرای Command وفرستادن نتیجه به سرویس گیرنده میشه (client)
برنامه رو کامپایل کنید و dll تواید شده رو به یه مسر راحت مثل D:\ کپی کنید (البته این کار دابخواهیه)
توانایی اجرای کدهای CLR به صورت پیش فرض در sqlserveroff هستش برای on کردنش کد زیر رو برای database خودتون اجرا کنید
sp_configure 'clr enabled',1
GO
Reconfigure
البته شما می تونید از SQL Server Surface Area Configurationنیز استفاد کنید
برای ایجاد assembly این کد هارو داخل sqlserver اجرا کنید
CREATE ASSEMBLY LearnCLRIntegration -- Assembly name, you can write which you wantFROM
'd:\your dll name.dll' -- write appropriate path and DLL name
WITH PERMISSION_SET = SAFE
GO
توضیح در کنار کد ها امده
البته با خود Management Studio هم میشه این کار رو کرد در داخل database مسیر زیر رو برید
Programmability=>assemblies=> add managed assembly
برای اجرا باید از assembly یه stored procedure بسازید با کد زیر :
کدش:
CREATE PROC clrsp
AS
EXTERNAL NAME ASSEMBLYNAME.StoredProcedures. StoredProcedure1-- ASSEMBLYNAME. Classname. Function name
ASSEMBLYNAME اسم اسمبلی که قبلا ساختیم
StoredProceduresاسم کلاس داخل اسمبلی
StoredProcedure1
هم اسم تابع ای هست که می خواد کار stored procedure رو انجام بده
حالا همه چیر ردیفِ
Exec clrsp
go
با این کد stored procedure اجرا میشه
به طور خلاصه برای ایجاد CLR Stored Procedure 3 مرحله داریم
1)ایجاد یه تابع static در داخل کلاسی به عنوان Stored Procedure
Register (2کردن اسمبلی با روش های گفته شده
3) ایجاد Stored Procedure از تابع داخل اسمبلی Registerشده و اجرا ان
برای اطلاعات بیشتر به MSDN مراجعه فر مایید
منبع:: :تشویق:wink !!Web