PDA

View Full Version : آموزش: مزیت استفاده از store procedure



sara_mp
چهارشنبه 27 آبان 1388, 22:54 عصر
مزیت استفاده از store procedure نسبت به query در چیه.:لبخندساده:

Beyondsoft
چهارشنبه 27 آبان 1388, 23:07 عصر
سلام دوست عزیز !
مزیت ها بسیارند اما از مهم ترین آن ها می توان به موارید زیر اشاره کرد:

1- برای امنیت بیشتر و جلوگیری از عملیاتی همچون sql injection
2- تمرکز لایه دیتا در داخل خود دیتابیس (به طور واضح تر اینکه یک برنامه نویس نباید دقدقه ی چگونگی نوشتن یک query را داشته باشد، و در مواردی که database admin و برنامه نویس یک فرد هستند نیز، بهتر است کار در هر لایه تفکیک شده باشد )
3- تمیزی و وضوح بیشتر کد !

موارد بیشتری نیز می توان نام برد ...

sunn789
چهارشنبه 27 آبان 1388, 23:20 عصر
در تکمیلصحبت ایشان اینکه فقط شمایک بار مینویسید و هر زمان نیاز شد فقط از طریق نام اجراش میکنید و هر زمان خاستید تغییر کوچیکی بدین لازم نیست تمام Quary هایی که نوشتی دوباره بگردی و پیدا کنی فقط با تغییر در Storeprocedure سریع تر انجام میشه

saeeedft
پنج شنبه 28 آبان 1388, 00:52 صبح
با سلام، در تکمیل صحبت دوستان، زمانی که شما یک store procedure مینویسید اون store procedure توی حافظه بانک کش میشه و این سرعت اجرای برنامه بالا میبره، از طرفی شما کد هاتونو دیگه توی خود فرمتون نمینویسید و این امنیت رو بالا میبره، چون دیگه کسی به اون کدها دسترسی نداره، ضمنا ترافیک شبکه هم کاهش پیدا میکنه

alireza_s_84
پنج شنبه 28 آبان 1388, 10:07 صبح
سلام:
کل دوستان موارد رو گفتن فقط من یکجا مرتب میکنم:
1- یک Stored Producer یکبار کامپایل میشود و پردازش میشود و برای همیشه مستقیما جهت بهره برداری آماده است. در صورتیکه دستورات نوشته شده در صفحات ابتدا باید پردازش شوند بعد مورد استفاده قرار بگیرند.
2- خطرات جانبی همانند حملات SQL Ejection به صفر میرسد.
3- تمرکز لایه دیتا در خود دیتابیس که مهمترین مزیتش یکجا بودن تمامی پرس و جوها بوده و اگر نیاز باشه بعدها یک پرس و جویی اصلاح بشه نیاز نیست توی تمامی صفحات دنبالش بگردی.
4- از نوشتن پرس و جوهای تکراری راحت میشین. یک نمونه ش عدم وجود نام کاربری از قبل در پایگاه داده ست که ممکنه چند جا نیاز به بررسی این مورد باشه که در صورت استفاده از پروسیجرها نیازی نیست چند پرس و جو رو تکراری نوشت.
5- کاهش حجم کدنویسی در صفحات .
6- کاهش ترافیک شبکه که به دلیل حجم انتقالی پرس و جوها میتونه زیاد باشه.
و کلی مزایای دیگر ...
موفق باشید

mohammad kafiyan
چهارشنبه 01 اردیبهشت 1389, 19:16 عصر
سلام به دوستان حال بگوید چگونه و کجا querry های (insert,delete,update,search) مربوطه به sql تایپ کنم و استفاده کنم و در c# چگونه می توانم این تاوبع را فراخوانی کنم و از این توابع در برنامه ام استفاده کنم
لطفا مراحل کار یا یک نمونه کار کوچک بگذارید تا استفاده کنیم
با تشکر:متفکر::متفکر:

s.khoshfekran
چهارشنبه 01 اردیبهشت 1389, 19:19 عصر
دوست عزیز منظورت اینه کخ می خوا update,delet , ... رو تو SP ذخیره کنی؟

mohammad kafiyan
چهارشنبه 01 اردیبهشت 1389, 20:31 عصر
دوست عزیز من یک کلاس در c# تعریف کردم و توابع مربوطه (insert,delete,update,search)
در کلاس تعریف کردم و در داخل برنامه ام دارم از این توابع استفاده میکنم اما چند تا از دوستان گفتند که بهتر این توابع را داخل store procedure بنویسی به دلیل مواردی که دوستان در همین تایپیک اعلام کردند
حال می خواستم ببینم که این توابع را کجا و چطور باید بنویسم و در c# چگونه این توابع را فراخوانی کنم و در برنامه ام از این تواع استفاده کنم
کمک کنید راهنمایی می خواهم
اگر می تونید نمونه برنامه بگذارید
با تشکر :افسرده::ناراحت:

s.khoshfekran
چهارشنبه 01 اردیبهشت 1389, 21:42 عصر
شما Store Procedure هارو باید در Sql Server تعریف کنی و در C# پارامترها رو بهش پاس بدی
http://msdn.microsoft.com/en-us/library/aa258259(SQL.80).aspx
http://www.developerfusion.com/article/4278/using-adonet-with-sql-server/3/
http://www.codeproject.com/KB/cs/simplecodeasp.aspx

mohammad kafiyan
چهارشنبه 01 اردیبهشت 1389, 21:54 عصر
لطفا می شه بیشتر راهنمایی کنید چون اصلا در این زمینه کار نکردم
:گریه::متفکر:

s.khoshfekran
چهارشنبه 01 اردیبهشت 1389, 21:57 عصر
دوست عزیز اصلا" شما این لینک هارو دیدی؟ :متعجب:

mohammad kafiyan
چهارشنبه 01 اردیبهشت 1389, 22:06 عصر
دوست عزیز لینک ها را دیدم نمی دونم کجای sqlserver باید دستورات تایپ شوند ، گفتم که من در این زمینه اصلا کار نکردم یک کمی بیشتر راهنمایی کنید اگر ممکنه
:گریه::گریه:

jas1387
چهارشنبه 01 اردیبهشت 1389, 22:57 عصر
برای ایجاد stored procedure در sql server


your DataBase---> Programmability -----> stored procedure

روی پوشه stored procedure راست کلیک کرده و new stored procedure را بزنید و کد خود را تایپ کنید

M.YasPro
پنج شنبه 02 اردیبهشت 1389, 08:53 صبح
سلام
در تکمیل حرفهای دوستان
فرض کنید برنامه شما چند کاربره باشه و امکان داشته باشه که چند کاربر همزمان از یه دیتابیس روی سرورتون استفاده کنند . حالا اگه دوتا شون بخوان همزمان یه رکورد رو ویرایش کنند چه اتفاقی می افته .؟
sp این مشکل رو بر طرف کرده و اگر کاربر a شروع به ویرایش یه رکورد کرد دیتابیس رو تا تموم شدن عملیات ویرایش کاربر اول lock می کنه تا اون عملیات با عملیات دوم برخورد نداشته باشه .
البته منظور از عملیات و loc کردن شاید در حد میکرو ثانیه باشه .

موفق باشید .

mohammad kafiyan
جمعه 03 اردیبهشت 1389, 23:22 عصر
سلام به دوستان بلاخره با تلاش کردن توانستم یک storedproceduer بسازم و تابع insert درون نوشتم و در c# فرخوانی و تست کردم جواب هم رگفتم حال می خواهم ببینم آیا می تونم دستورات دیگر sql (update,select,delete( را درون همین storedproceduer بنویسم اگر ممکنه توضیح بدهید

Beyondsoft
شنبه 04 اردیبهشت 1389, 08:48 صبح
سلام به دوستان بلاخره با تلاش کردن توانستم یک storedproceduer بسازم و تابع insert درون نوشتم و در C#‎ فرخوانی و تست کردم جواب هم رگفتم حال می خواهم ببینم آیا می تونم دستورات دیگر sql (update,select,delete( را درون همین storedproceduer بنویسم اگر ممکنه توضیح بدهید

آره. به مثال زیر توجه کن:



Create Procedure sp_Country_SelectAll
As
Begin
Select
[Id],
[CountryName]
From Country
End

--------------------------------------------------------------------------------
--------------------------------------------------------------------------------

GO


Create Procedure sp_Country_SelectRow
@Id int
As
Begin
Select
[Id],
[CountryName]
From Country
Where
[Id] = @Id
End

--------------------------------------------------------------------------------
--------------------------------------------------------------------------------

GO

Create Procedure sp_Country_Insert
@CountryName nvarchar(100)
As
Begin
Insert Into Country
([CountryName])
Values
(@CountryName)

Declare @ReferenceID int
Select @ReferenceID = @@IDENTITY

Return @ReferenceID

End

--------------------------------------------------------------------------------
--------------------------------------------------------------------------------

GO

Create Procedure sp_Country_Update
@Id int,
@CountryName nvarchar(100)
As
Begin
Update Country
Set
[CountryName] = @CountryName
Where
[Id] = @Id

End


--------------------------------------------------------------------------------
--------------------------------------------------------------------------------

GO



Create Procedure sp_Country_DeleteRow
@Id int
As
Begin
Delete Country
Where
[Id] = @Id

End

GO

mohammad kafiyan
شنبه 04 اردیبهشت 1389, 21:18 عصر
با سلام دوست عزیز واقعا راهنمایی خوبی بود حالا می تونی به من بگی که چطور از این storedproceduer در c# استفاده کنم یعنی چگونه به این توابع مقادیرم را بفرستم
با تشکر:تشویق::تشویق:

mohammad kafiyan
یک شنبه 05 اردیبهشت 1389, 09:28 صبح
از دوستان کسی نیست یک راهنمایی کوچولوی دیگه بکنه
:متفکر::متفکر:

M.YasPro
یک شنبه 05 اردیبهشت 1389, 13:51 عصر
سلام



cmd.Connection = cnn;
cmd.CommandText = @"spName";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@MyVar", SqlDbType.Int).Value =1;
cmd.ExecuteNonQuery();

سوالی بود مطرح کنید .
موفق باشید .

mohammad kafiyan
یک شنبه 05 اردیبهشت 1389, 16:39 عصر
سلام دوست عزیز که من راهنمایی می کنید می خواست ببینم من یک عدد storedproceduer در database تعریف کردم حال داخل این storedproceduer ،
update,select,delete,insert قرار دادم حال چگونهاین توابع را داخل c# صدا بزنم

cmd.CommandText = @"spName";
نام storedproceduer وارد کردم
حال می خواهم تابع update استفاده کنم یا مثلا delete را استفاده کنم چگونه محیط c#
تشخیص میده که من از کدام تابع درون storedproceduer می خواهم استفاده کنم آیا در محیط c# نایزی هست به غیر از نام storedproceduer نام تابع مورد نظر را هم وارد کنم
بگویید لطفا چگونه؟
:گریه::گریه:

M.YasPro
دوشنبه 06 اردیبهشت 1389, 07:36 صبح
من یک عدد storedproceduer در database تعریف کردم حال داخل این storedproceduer ،
update,select,delete,insert قرار دادم حال چگونهاین توابع را داخل C#‎ صدا بزنم

هر sp رو باید برای یه منظور خاص بنویسید . وقتی یه sp میشه کلش اجرا میشه ، نه فقط قسمت update یا ه فقط قسمت insert .
شما باسد برای هر کارتون (insert یا delete ) استور جداگونه بنویسید .



منظورتون از تابع چی هست اگر function توی sql هست که باید


cmd.CommandText = @FunctionName";
cmd.CommandType = CommandType.Text;


سوالی بود مطرح کنید .
موفق باشید .