PDA

View Full Version : سوال: Linq آيا در برابر sqlserver است



Iran58
دوشنبه 10 مهر 1391, 20:51 عصر
آيا هنگاميكه مي خواهيم يك برنامه را بكمك Linqبنويسيم بجز ساختن table در sql ديگر لازم نيست با Sql دستورات ديگري مانند(select,query,sp) نوشت
لطفا ميشه كمي توضيح دهيد باتشكر

r. salehi
سه شنبه 11 مهر 1391, 05:36 صبح
اگر اجازه بدین قضیه را کمی روشنتر و باز تر کنیم
برای اتصال به بانک اطلاعاتی روشهای مختلفی هست که یکی از اونها Linq to Sql هست. این روش با عبارتهای پرسوجوی linq که در سطح برنامه برای واکشی اطلاعات با یک ساختار زبانی مشترک از اشیایی حاوی داده هایی هستند بکار میره، متفاوته. البته در این روش شما از مزایایی استفاده از عبارتهای پرسوجوی linq طبیعتا بهره مند خواهید بود
در روش Linq to SQL مانند روشهای قبلی مثل ایجاد DataSet داده ها از بانک واکشی میشن و به صورتی بسیار ساده تر مورد استفاده قرار میگیرند. اما این به معنی این نیست که شما دیگه نیازی به دستورات SQL بانک اطلاعاتی ندارید. گاهی ما مجبوریم یک سری از دستورات را در داخل بانک اجرا کنیم.
در واقع Linq to Sql کاری که انجام میده ایجاد روشی به صورت شی گرا برای دسترسی با پایگاه داده خواهد بود. مزایای این تکنولوژی کاهش زمان برنامه نویسی، ایجاد کد برنامه خواناتر و ساده تر و تست و عیب یابی راحتر کد خواهد بود.
امیدوارم براتون مفید بوده باشه

kamrannazari
جمعه 21 مهر 1391, 12:53 عصر
شما مي توانيد دستورات insert , update , delete رو به صورت stored procedure در sql server بنويسيد و به راحتي مثل يك متد در ويژوال استفاده كنيد به مثال زير دقت كنيد

CREATE PROCEDURE [dbo].[Insert_Branches]
@Title nvarchar(250)
,@TitleEn nvarchar(250)
,@Address nvarchar(250)
,@AddressEn nvarchar(250)
,@City nvarchar(100)
,@CityEn nvarchar(100)
,@Tels nvarchar(250)
,@ManagerId int
,@WorkTime nvarchar(250)
,@WorkTimeEn nvarchar(250)
,@BoySection bit
,@GirlSection bit
,@LinkFa nvarchar(250)
,@LinkEn nvarchar(250)
,@Activ bit
,@UId int
,@SaveUpdate bit
AS
BEGIN
SET NOCOUNT ON;

insert into [Branches](
[id]
,[Title]
,[TitleEn]
,[Address]
,[AddressEn]
,[City]
,[CityEn]
,[Tels]
,[ManagerId]
,[WorkTime]
,[WorkTimeEn]
,[BoySection]
,[GirlSection]
,[LinkFa]
,[LinkEn]
,[Activ]
,[UId]
,[SaveUpdate]
) VALUES(
@id
,@Title
,@TitleEn
,@Address
,@AddressEn
,@City
,@CityEn
,@Tels
,@ManagerId
,@WorkTime
,@WorkTimeEn
,@BoySection
,@GirlSection
,@LinkFa
,@LinkEn
,@Activ
,@UId
,@SaveUpdate
)

END



حالا با استفاده از لينك به راحتي مي تونيم فقط با يكي دو خط عمليات درج رو انجام بديم

Database.instDataContext db = new Database.instDataContext();

db.Insert_Branches(TitleFa.Text
, TitleEn.Text
, Address.Text
, AddressEn.Text
, "بوشهر"
, "Bushehr"
, Tels.Text
, 0
, WorkTime.Text
, WorkTimeEn.Text
, BoySection.Checked
, GirlSection.Checked
, LinkFa.Text
, LinkEn.Text
, Activ.Checked
, 1
, true);



همانطور كه مي بينيد به راحتي مي تونيم در از توابع و stored procedure هاي موجود مثل يك متد رفتار كنيم
در حقيقت يك لايه از برنامه نويسي سه لايه رو مي شه با وجود لينك حذف نمود

kamrannazari
جمعه 21 مهر 1391, 12:56 عصر
در كنار اين مزايا مي تونيد حق دسترسي به كابر رو به صورت مستقيم براي delete,update,insert از كاربر گرفت و به صورت كاملا كنترل شده اين عمليات ها رو فقط با استفاده از stored procedure ها انجام داد تا عمليات ثبت لوگ هاي كاربران هم به راحتي انجام شود و همچنين بررسي اطلاعات ورودي فيلدها را هم مي توان به راحتي كنترل كرد

kamrannazari
جمعه 21 مهر 1391, 13:00 عصر
مطمينا سرعت كمي كند تر خواهد بود ولي در صورت استفاده صحيح مي تونه در امنيت و تميز بودن كد خيلي موثر باشه به اين دليل كه به صورت خودكار كليه ارتباطات با استافده از پارامتر انجام مي گيره و خود به خود sql injection امكان پذير نخواهد بود.
البته تغييرات سرعت آنچنان تفاوتي نخواهد داشت كه با كمي برنامه نويسي مي توان حتي سرعت را با استافده از كش چند برابر هم كرد
در مثال زير از سشن استافده شده كه مثلا مي توان از كش استافده نمود
if (Session[sessionName] == null)
{
Database.instDataContext db = new Database.instDataContext();

var query = from m in db.Branches
select new { m.id, m.Title, m.TitleEn, m.Activ, m.BoySection, m.GirlSection };

if (search != "")
query = from m in db.Branches
where m.Title.Contains(search)
select new { m.id, m.Title, m.TitleEn, m.Activ, m.BoySection, m.GirlSection };

GridView1.DataSource = query;
Session[sessionName] = query;
}
else
{
var data = Session[sessionName];
GridView1.DataSource = data;
}

GridView1.DataBind();

علی متقی پور
سه شنبه 25 مهر 1391, 02:21 صبح
با سلام
برنامه SpGen_Generator جناب کرامتیان هم همین خواص رو دارن ولی براساس ADO.net هستن نه linq
راستش برای مبتدی ها و کم سوادهایی مثل من واقعا اینهمه تنوع بدون اینکه مشخص باشه هدف اینهمه تنوع چی بوده، گیج کنندس:-(
من واقعا نمیدونم الان باید برم ADO.net خودم را کامل کنم و از مبتدی بودن در بیام یا برم سراغ linq
هر شرکتی هم روش خودش را داره و اینطور نیست که مشخص باشه کدوم مورد پسند تره
به قول شاعر:
اون گوشه از قلبم
که مال هیچکس نیست
کی با تو آروم شد
اصلا مشخص نیست!

r. salehi
سه شنبه 25 مهر 1391, 03:14 صبح
با سلام
برنامه SpGen_Generator جناب کرامتیان هم همین خواص رو دارن ولی براساس ADO.net هستن نه linq
راستش برای مبتدی ها و کم سوادهایی مثل من واقعا اینهمه تنوع بدون اینکه مشخص باشه هدف اینهمه تنوع چی بوده، گیج کنندس:-(
من واقعا نمیدونم الان باید برم ADO.net خودم را کامل کنم و از مبتدی بودن در بیام یا برم سراغ linq
هر شرکتی هم روش خودش را داره و اینطور نیست که مشخص باشه کدوم مورد پسند تره
به قول شاعر:
اون گوشه از قلبم
که مال هیچکس نیست
کی با تو آروم شد
اصلا مشخص نیست!
سلام
دوست عزیز Linq چیزی نیست که جای ADO.Net را بگیره. اگر هم منظورتون روش Linq to SQL هست باید عرض کنم اونهم در امتداد ADO.Net هست نه جایگزینش. به پست زیر یک هم یک نگاهی بندازید لطفا. من هم مثل شما یه مدتی حسابی در این خصوص سردرگم بودم در ضمن پست دوم از همین تاپیک را هم ملاحظه بفرمایید.
موفق باشید
http://barnamenevis.org/showthread.php?363262-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%D9%8A%D8%B3%D9%8A-%D8%A7%D8%B2-%D8%B7%D8%B1%D9%8A%D9%82-%D9%85%D8%B9%D9%85%D8%A7%D8%B1%D9%8A-%D8%B3%D9%87-%D9%84%D8%A7%D9%8A%D9%87-%D9%8A%D8%A7-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-linq

علی متقی پور
سه شنبه 25 مهر 1391, 20:35 عصر
سلام
دوست عزیز Linq چیزی نیست که جای ADO.Net را بگیره. اگر هم منظورتون روش Linq to SQL هست باید عرض کنم اونهم در امتداد ADO.Net هست نه جایگزینش. به پست زیر یک هم یک نگاهی بندازید لطفا. من هم مثل شما یه مدتی حسابی در این خصوص سردرگم بودم در ضمن پست دوم از همین تاپیک را هم ملاحظه بفرمایید.
موفق باشید
http://barnamenevis.org/showthread.php?363262-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%D9%8A%D8%B3%D9%8A-%D8%A7%D8%B2-%D8%B7%D8%B1%D9%8A%D9%82-%D9%85%D8%B9%D9%85%D8%A7%D8%B1%D9%8A-%D8%B3%D9%87-%D9%84%D8%A7%D9%8A%D9%87-%D9%8A%D8%A7-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-linq

سلام دوست عزیز
مرسی بابت راهنمائیتون اما معنای "در امتداد" را من متوجه نمیشم.
اونطوریکه من فهمیدم از طریق لینک میشه کاری کرد که ارتباط برنامه با بانک راحتتر برقرار بشه و اونقد مراحل بنظر من عجیب و غریب ado.net را انجام نداد. اگر با برنامه SpGen جناب کرامتیان که در همین سایت معرفیش کردن کار کرده باشید از طریق این کد جنریتور هم میشه خیلی راحت با SP های بانک ارتباط برقرار کرد و در واقع از اونام مثه یه متد استفاده کرد.
خب پس تا اینجا این مزیت linq رو ado هم میتونه ایجاد کنه. این وسط حالا من هنوز متوجه نشدم که بهتره برای ارتباط با بنک با همون ado کار کنم یا برم linq رو یاد بگیرم. ضمن اینکه هنوز در مورد خود ado هم نمیدونم بهتره از چه روش و چه آبجکت هایی استفاده کنم.
خلاصه که اینهمه را گفتم که بگم حداقل برای من مبتدی هنوز مشخص نشده که linq جایگزین و انتخاب بهتری در برابر کدوم یکی از انتخاب های سابقه
بازم ممنون

r. salehi
سه شنبه 25 مهر 1391, 22:27 عصر
سلام مجدد
ببینید شما در برنامه نویسی چند لایه دو لایه را به دیتا اختصاص میدید یکی برای ارتباط با بانک و دیگری برای تبدیل فیلدهای جداول بانک به کلاس. با این تبدیل در لایه های دیگه شما فیلدها و جداول بانک اطلاعاتی خودتون را مثل دیگر اشیاء مجود در ویژوال استادیو مانند یک کامبوباکس مورد استفاده قرار میدید. حالا در نظر بگیرید که دوتا تکنولوژی جدید با اسامی Linq to SQL و Entity Framework امده که اون کارهایی که لایه اول و دوم انجام میدادند را به یک باره و بدون دردسر براتون انجام میدن یعنی اینکه به بانک متصل میشن و فیلدهای جداولتون را راحت مثل شی در اخیارتون قرارمیدند. خوب در همچین حالتی شما قادر خواهید بود کد مربوط به بانک اطلاعاتی خودتون را به راحتی عیب یابی کنید در زمان نوشتن کد در حالی که قبلا دستورات SQL تا زمانی که برنامه را اجرا نمی کردید معلوم نبود که درست هستند یا اشتباه. اما اجازه بدین این توضیح را هم بدم که بین Linq و Linq to SQL تفاوت وجود داره. این دو به یک مفهوم نیستند و توضیحاتش رو هم در دومین پست از همین تاپیک می تونید ملاحظه کنید.
نکته دیگه اینکه ADO.Net و این دو تکنولوژی جدید از هم جدا نیستند. یعنی Linq to SQL و Entity Framework در واقع بر ADO.net بنا شده اند و جدا از اون نیستند.
و به عنوان آخرین مورد. یک کتابی اخیرا چاپ شده برای ویژوال بیسیک با نام راهنمای کاربردی ویژوال بیسیک دات نت نوشته مهندس محسن مدحج انتشارات مهرگان قلم که کتاب بسیار خوبیه و تمام این مشکلات شما را مختصر و مفید برطرف میکنه. من خودم با این کتاب شروع کردم و به نظرم بهترین کتابیه که در این ضمینه در حال حاضر در بازار وجود داره.
امید و ارم تونسته باشم کمکی بکنم