PDA

View Full Version : سوال: CLR چی هست؟ طریقه کار کردن باش چیه؟



zhr.rezae66i
شنبه 14 اردیبهشت 1392, 14:17 عصر
من باید یک کلاس رو در .net تعریف کنم و اونو در sql صدا بزنم
اینکار ربط به CLR داره
ولی نمیدونم چطوریه
لطفا ی مثاله خیلی خیلی ساده بزنید برای ی تابع در دات نت و اونو در sql صدا کنید تا من روش کار دستم بیاد
سرچ هم میزنم چیزی نمیفهمم
لطفا راهنمایی کنید منو

hamed_gibago
شنبه 14 اردیبهشت 1392, 14:28 عصر
من باید یک کلاس رو در .net تعریف کنم و اونو در sql صدا بزنم
اینکار ربط به CLR داره
ولی نمیدونم چطوریه
لطفا ی مثاله خیلی خیلی ساده بزنید برای ی تابع در دات نت و اونو در sql صدا کنید تا من روش کار دستم بیاد
سرچ هم میزنم چیزی نمیفهمم
لطفا راهنمایی کنید منو

clr همون common language runtime در .net هستش که زبان میانی .net هست که اول کدها به اون زبان میانی تبدیل می شه بعد از اونجا به کد ماشین

tooraj_azizi_1035
شنبه 14 اردیبهشت 1392, 15:58 عصر
سلام
قابلیت common language runtime (CLR) integration به طور پیش فرض غیر فعال است و باید برای استفاده از اشیایی که با استفاده از CLR integration ساخته شده اند فعال باشد.
برای فعال سازی باید از sp_configure stored procedure استفاده کنید:

sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'clr enabled', 1;
GO
RECONFIGURE;
GO

قدم به قدم دنبال کن:
http://techo.luefher.com/coding/dot-net/c-sharp/create-a-sql-clr-stored-procedure-using-net-c-example/

ahmad156
شنبه 14 اردیبهشت 1392, 17:12 عصر
کتاب فارسی در موردش هست خیلی کامله
http://www.softgozar.com/WebPage/SearchResult.aspx?Keyword=clr

zhr.rezae66i
شنبه 14 اردیبهشت 1392, 17:39 عصر
کتاب فارسی در موردش هست خیلی کامله
http://www.softgozar.com/WebPage/SearchResult.aspx?Keyword=clr
بلاکه این که دادید باز نمیشه

ahmad156
شنبه 14 اردیبهشت 1392, 17:45 عصر
ESET NODE تون رو Disable کنین

tooraj_azizi_1035
شنبه 14 اردیبهشت 1392, 21:35 عصر
Target framework رو روی 3.5 یا قبل ست کنید. (راست کلیک روی پروژه و Properties و Target framework )


http://i.msdn.microsoft.com/areas/global/content/clear.gifImportantSQL Server 2005 and SQL Server 2008 only support SQL Server projects that were built with the 2.0, 3.0, or 3.5 version of the .NET Framework. If you try to deploy a SQL Server project to SQL Server 2005 or SQL Server 2008, an error appears: Deploy error (SQL01268): .NET SqlClient Data Provider: Msg 6218, Level 16, State 3, Line 1 CREATE ASSEMBLY for assembly 'AssemblyName' failed because assembly 'AssemblyName' failed verification. Check if the referenced assemblies are up-to-date and trusted (for external_access or unsafe) to execute in the database (where AssemblyName is the name of the assembly that you are deploying). For more information, see How to: Create a Project for Database Objects that Use SQL Server Common Language Run-time Integration (http://msdn.microsoft.com/en-us/library/84b1se47%28v=vs.100%29.aspx).

zhr.rezae66i
یک شنبه 29 اردیبهشت 1392, 19:51 عصر
دوستان من کد رو قرار میدم اگر کسی نیاز داشت.
برای اینکه یک تابع که در asp هست رو در sql بشه فراخوانی کرد.باید مراحل زیر رو انجام داد.
1- برنامه مورد نظرتون رو در قالب یک class library بنویسید. دقت کنید که Target framework رو روی 3.5 یا قبل ست کنید. (راست کلیک روی پروژه و Properties و Target framework )
داخل این برنامه ممکنه چندین تابع قرار بدید که همدیگه رو فراخانی میکنن. اما در نهایت یکی از اینا اصلیه که در sql فراخوانی میشه . تابع اصلی من در اینجا اسمش GetFilesFromDirectory هست. یک قطعه کد رو قرار میدم.

namespace ReadFiles_N
{
public sealed class ReadFiles_
{
public static string GetFilesFromDirectory(String number)
{.
.
.
string data_org = ReadFilesFromDirectory(fname, number);
.
.
.

return data2;
}
public static string ReadFilesFromDirectory(string DirPath, string number)
{
.
.
.
}

}
}


2- این class library قابل دیباگ کردن نیست. و باید اونو buld کرد. اونو بیلد کنید.
3-یک فایل با پسوند .dll ساخته میشه که در آدرس محل ذخیره پروژه\obj\debug قرار داره. اون رو کپی برداری کنید. و در یک محل مشخص past کنید
4- حالا برنامه ما در قسمت asp کارش تموم شده و باید اونو در محیط sql معرفی کنیم. برای اینکار اول باید این محیط یکسری دسترسی هایی بما بده.

اولین کوئری که اجرا باید کنید اینه

ALTER DATABASE "database name" SET TRUSTWORTHY ON;
EXEC sp_changedbowner 'sa'


5- حالا باید اسمبلشو ایجاد کرد با دستور زیر

Create ASSEMBLY "اسم namespace برنامه"
FROM 'C:\ReadFiles_N.dll'
WITH PERMISSION_SET = EXTERNAL_ACCESS
GO

روبروی from آدرس محلیه که اون dll رو کپی کردید.
دستور PERMISSION_SET = EXTERNAL_ACCESS برای این هست که بمن اجازه یکسری اعمال رو بده. مثلا من در اینجا لازم بود یک فایل رو بخونم از محل فیزیکیش و باید اجازشو بمن بده. غیر از این permission یک permission دیگه هم هست به صورت PERMISSION_SET = SAFE که محدود تره و با این دسترسی نمیشه یک فایل خارجی رو خوند.
6- ساختن فانکشنی که در sql شناخته بشه بصورت زیر
create FUNCTION dbo.funcGetFilesFromDirectory(@input nvarchar(200))
RETURNS nvarchar(max)
AS EXTERNAL NAME ReadFiles_N.[ReadFiles_N.ReadFiles_].GetFilesFromDirectory

تابع من در class library یک ورودی string و همچنین یک خروجی string داره . ReadFiles_N اسم nameSpace برنامه هست. و GetFilesFromDirectory اسم تابع اصلی در برنامه ای که در asp نوشتم
7- حالا همه چیز آمادس تا ما بتونیم تابع رو ازش استفاده کنیم .
برای مثال بصورت زیر
select @lastchild = dbo.funcGetFilesFromDirectory(@input)

zhr.rezae66i
چهارشنبه 08 خرداد 1392, 09:20 صبح
دوستان یک سوال
برای اینکه در sql از روی ادرس شبکه چیزیو بخونیم نیاز هست که window authentication وصل شده بباشیم حتما یا اینکه با sql authentication هم موردی نداره