PDA

View Full Version : سوال: توضيح درمورد stored procedureها



sanaz e
سه شنبه 01 اردیبهشت 1388, 09:42 صبح
لطفا درباره استور پروسجرها و پارامترها و نحوه استفاده از آنها در نوشتن query توضيح بديد. اصلا به چه درد مي خورن؟
خيلييييييي خيلييييي واسم مهمه:عصبانی++:

r_mehrizi
سه شنبه 01 اردیبهشت 1388, 10:06 صبح
به جاي اينكه دستورات sql را داخل برنامه بنويسيم درون خود sql server نوشته و دربرنامه انها را فراخواني مي كنيم


PrivateSub btnLogin_Click(ByVal sender AsObject, ByVal e As System.EventArgs) Handles btn_login.Click
Dim USERSClass AsNew clsLogin
SelectCase USERSClass.AuthenticateUser(txt_username.Text, txt_password.Text)
Case 0
.
.
Case 1
.
.
Case 2
.
.
EndSelect

EndSub

يك كلاس به اسم clslogin تعريف كرده تابع AuthenticateUser را داخل ان مي نويسيم




PublicFunction AuthenticateUser(ByVal strUsername AsString, ByVal strPassword AsString) AsInteger
Dim myCmd As SqlCommand
Dim parmReturn As SqlParameter
myCmd = New SqlCommand("VERIFY_PASSWORD", Connection)
myCmd.CommandType = CommandType.StoredProcedure
Dim param AsNew SqlParameter("@UserName", strUsername)
myCmd.Parameters.Add(param)
' myCmd.Parameters.Add("@UserName", strUsername)
param = New SqlParameter("@Password", HashPasswordForStoringInConfigFile(strPassword, "md5"))
' myCmd.Parameters.Add("@Password", System.Text.Encoding.ASCII.GetBytes(strPassword))
myCmd.Parameters.Add(param)
parmReturn = myCmd.Parameters.Add("@Return", SqlDbType.Int)
parmReturn.Direction = ParameterDirection.ReturnValue
Connection.Open()
myCmd.ExecuteNonQuery()
Connection.Close()
Return myCmd.Parameters("@Return").Value
EndFunction


سپس داخل sql شده درون پايگاه داده يك new store procedure بسازيد
و كدهاي زير را داخل ان بنويسيد



create PROCEDURE [dbo].[VERIFY_PASSWORD]
(
@username nvarchar( 20 ),
@password nvarchar(32)

)
AS
DECLARE @foundUser nvarchar( 20 )
SELECT @foundUser = s_UserName
FROM tbl_staff
WHEREltrim(rtrim(s_UserName))=ltrim(rtrim(@usernam e))
ANDltrim(rtrim(convert(nchar(20),s_Password)))=ltr im(rtrim(convert(nchar(20),@password)))
IF @foundUser ISNOTNULL
Return 0
ELSE
IFExists(SELECT s_UserName
FROM tbl_staff
WHEREltrim(rtrim(s_UserName))=ltrim(rtrim(@usernam e)))
Return 2
ELSE
RETURN 1

xxxxx_xxxxx
سه شنبه 01 اردیبهشت 1388, 10:27 صبح
اصلا به چه درد مي خورن؟

يكي از فوايدش براي جلوگيري از SQL Injection هست. وقتي شما از Stored Procedure ها استفاده كنيد ديگه راه Inject كردن رو مي بنديد.

sanaz e
سه شنبه 01 اردیبهشت 1388, 10:32 صبح
از توجه شما ممنونم
ميشه درمورد متد add sqlparameter و آرگومانهاش يكم توضيح بديد:خجالت:

sanaz e
سه شنبه 01 اردیبهشت 1388, 10:38 صبح
يكي از فوايدش براي جلوگيري از SQL Injection هست.

ببخشيد اين sql injection چي هست؟:خجالت:

xxxxx_xxxxx
سه شنبه 01 اردیبهشت 1388, 10:50 صبح
ببخشيد اين sql injection چي هست؟:خجالت:
SQL Injection نوعي از حملات به بانك اطلاعاتي هست كه با وارد كردن دستوراتي (sql) ميشه كوئري ها و شرط هارو تغيير داد تا بشه به برنامه نفوذ كرد.

r_mehrizi
سه شنبه 01 اردیبهشت 1388, 10:52 صبح
در نظر بگيريد كه داخل صفحه لوگين دو تل تكست باكس هستش كه مربوط به يوزر و پسورد كاربر هست وقتي كاربر يوزر و پسورد را وارد كرد اطلاعات اون به تابع AuthenticateUser فرستاده ميشه
استور پروسيجر VERIFY_PASSWORD اين دو مقدار را بهعنوان ورودي مي گيرد تا چك كند اين كاربر درون جدول كاربران هست يا نه