.NET . рдореЗрдВ рдХреИрдкреНрдЪрд╛ рдЫрд╡рд┐рдпреЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг
Experience Level - Intermediate
рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдПрдХ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдпрд╣ рд╣реИ, рдпрд╣ рд╕рдмрд╕реЗ рд╡рд┐рд╕реНрддреГрдд рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЖрдкрдХреЛ рдХрдо рд╕реЗ рдХрдо рд╕реБрд░рдХреНрд╖рд╛ рдХреА рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдкрд░рдд рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛, рдФрд░ рдПрдХ рд╣рдореЗрд╢рд╛ рдмрджрд▓рддреЗ рдкрд░рд┐рдгрд╛рдо рд╕реЗрдЯ рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛
рдЗрд╕реЗ VB.NET рдФрд░ MVC рдкреЗрдЬ рд░реВрдЯрд┐рдВрдЧ рдХреЗ рд╕рд╛рде SQL рдореЗрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рд╣рдореЗрдВ рдЕрдкрдиреЗ рд╕рднреА рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП SQL рддрд╛рд▓рд┐рдХрд╛ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЙрдЪреНрдЪ рдЙрдкрдпреЛрдЧ рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ GUID рдкрд░ рдПрдХ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред
Create Table
CREATE TABLE [dbo].[captcha]([captchaGUID] [varchar](36) NOT NULL,[captchaValue] [varchar](10) NULL,[captchaDateAdded] [datetime] NULL,[captchaDateGuessed] [datetime] NULL)
рдПрдХ рд╕реЗрд╡рд╛ рдкреГрд╖реНрда рдЬреЛрдбрд╝реЗрдВ
рдЖрдЧреЗ рд╣рдо рдПрдХ рд░реИрдВрдбрдо рд▓реЗрдЯрд░ рдЬреЗрдирд░реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдлрдВрдХреНрд╢рди рдмрдирд╛рдПрдВрдЧреЗред рдпрджрд┐ рдЖрдк рдиреАрдЪреЗ рдХреА рдУрд░ рдмрд╛рд░реАрдХреА рд╕реЗ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдХреЛрдб рдХреБрдЫ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЦрд╛рд▓реА рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЛ рдкрд╛рд╕ рдХрд░ рджреЗрдЧрд╛, рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЙрддреНрдкрдиреНрди рдорд╛рди рд╣рдореЗрд╢рд╛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд▓рдВрдмрд╛рдИ рдХреЗ рд╣реЛрдВрдЧреЗред
рд╣рдо рдорд╛рди рдХреЗ рд░реВрдк рдореЗрдВ 40 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ 5 рдореЗрдВ рд╕реЗ рдПрдХ рдореМрдХрд╛ рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛ рд╣реИ рдХрд┐ рд╕реНрдЯреНрд░рд┐рдВрдЧ (32 рдХреА рд▓рдВрдмрд╛рдИ рдХреЗ рд╕рд╛рде) рдПрдХ рдЦрд╛рд▓реА рдорд╛рди рд▓реМрдЯрд╛рддреА рд╣реИред
Random Letter Function
CREATE FUNCTION [dbo].[GetLetter](@MyInt INT) RETURNS VARCHAR(1) AS BEGINRETURN (SELECT REPLACE(SUBSTRING('ABCDEFGHJKMNPQRTUVQXYZ0123456789', @MyInt,1),'_',''))ENDGOSELECT dbo.GetLetter(ROUND(RAND()*40,0))
рдПрдХ рд╕реЗрд╡рд╛ рдкреГрд╖реНрда рдЬреЛрдбрд╝реЗрдВ
рдЕрдм рд╣рдо рд░рд┐рдХреЙрд░реНрдб рдХреЛ рд╡реЗрдм рд╕рд╛рдЗрдЯ рдкрд░ рд╡рд╛рдкрд╕ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд╛рд░реНрдпрд╡рд┐рдзрд┐ рдмрдирд╛рдПрдВрдЧреЗ, рдпрд╣ рд╡рд╣ рдЬрдЧрд╣ рднреА рд╣реИ рдЬрд╣рд╛рдВ рдХреИрдкреНрдЪрд╛ рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕ рдХреЛрдб рдореЗрдВ рдЙрдиреНрд╣реЗрдВ 30 рдорд┐рдирдЯ рдХреЗ рдмрд╛рдж рдбрд┐рд▓реАрдЯ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рд╣рдо рдлрд╝рдВрдХреНрд╢рди рдХреЛ 10 рдмрд╛рд░ рд╕реЗ рдКрдкрд░ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдорд╛рдиреЛрдВ рдХреЛ рдПрдХ рд╕рд╛рде рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдФрд░ рдкреБрд░рд╛рдиреЗ рдЕрдиреБрдорд╛рдирд┐рдд рдорд╛рдиреЛрдВ рдХреЛ рд╣рдЯрд╛ рджреЗрддреЗ рд╣реИрдВредStored Procedure
CREATE PROC [dbo].[NewCaptchaValue] AS BEGINWHILE (SELECT COUNT(*) FROM captcha WHERE captchaDateGuessed IS NULL)<150BEGIN
INSERT INTO captcha(captchaGUID,captchaValue,captchaDateAdded)SELECT NEWID(),dbo.GetLetter(ROUND(RAND()*40,0))+dbo.GetLetter(ROUND(RAND()*40,0))+dbo.GetLetter(ROUND(RAND()*40,0))+dbo.GetLetter(ROUND(RAND()*40,0))+dbo.GetLetter(ROUND(RAND()*40,0))+dbo.GetLetter(ROUND(RAND()*40,0))+dbo.GetLetter(ROUND(RAND()*40,0))+dbo.GetLetter(ROUND(RAND()*40,0))+dbo.GetLetter(ROUND(RAND()*40,0))+dbo.GetLetter(ROUND(RAND()*40,0)),GETDATE()ENDDELETE FROM captcha WHERE captchaDateGuessed<DATEADD(MINUTE,-30,GETDATE())DECLARE @Newcaptcha VARCHAR(36)=(SELECT TOP 1 captchaGUID FROM captcha WHERE captchaDateGuessed IS NULL)SELECT @NewcaptchaEND
рдПрдХ рд╕реЗрд╡рд╛ рдкреГрд╖реНрда рдЬреЛрдбрд╝реЗрдВ
рдореИрдВрдиреЗ рдкрд╛рд╕/рдлреЗрд▓ рдХреА рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╡рд╛рдкрд╕ рднреЗрдЬрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред
Stored Procedure
CREATE PROC [dbo].[CaptchaValue](@captchaGUID VARCHAR(36),@captchaValue VARCHAR(10)) AS BEGINDECLARE @CaptchaValueDB VARCHAR(10)=(SELECT captchaValue FROM captcha WHERE captchaGUID=@captchaGUID)DECLARE @Newcaptcha VARCHAR(36)UPDATE captcha SET captchaDateGuessed=GETDATE() WHERE captchaGUID=@captchaGUIDIF @captchaValue=@CaptchaValueDBBEGINSET @Newcaptcha='Pass'ENDIF @captchaValue<>@CaptchaValueDB OR @CaptchaValueDB IS NULLBEGINSET @Newcaptcha='Fail'ENDSELECT @NewcaptchaEND
рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдореЗрдВ рдЕрдХрд╛рджрдореА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░реЗрдВ
рдпрд╣рд╛рдВ рдЕрдиреБрд╕рд░рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдХрджрдо
- рдпрджрд┐ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рдирд╣реАрдВ рд╣реИ, рддреЛ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдХреЗ рдЕрдиреБрд╕рд╛рд░ App_Code рдлрд╝реЛрд▓реНрдбрд░ рдЬреЛрдбрд╝реЗрдВ
- App_Code рдлрд╝реЛрд▓реНрдбрд░ рдкрд░ рджрд╛рдпрд╛рдБ рдорд╛рдЙрд╕ рдмрдЯрди рдФрд░ Add>Class . рдЪреБрдиреЗрдВ
- рдПрдХ рдкреЙрдк-рдЕрдк рджрд┐рдЦрд╛рдИ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕ рд╡рд░реНрдЧ рдХреЛ Captcha.vb рдкрд░ рдХреЙрд▓ рдХрд░реЗрдВ
рдЗрд╕ рдирдП рдЖрдЗрдЯрдо рдкрд░ рд░рд╛рдЗрдЯ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рдФрд░ рдЧреБрдг рдЪреБрдиреЗрдВред
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╡рд░реНрдЧ рдШреЛрд╖рдгрд╛ рдХреЗ рдКрдкрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдВрджрд░реНрдн рдЬреЛрдбрд╝реЗрдВ;
Imports System.Drawing
рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдореЗрдВ рдЕрдХрд╛рджрдореА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░реЗрдВ
Private Shared Function GenerateLineNumberY() As Integer Dim ret As New Integer ret = (6 * Right((Rnd() * Rnd() * Rnd()), 1)) + 2 Return ret End Function Private Shared Function GenerateLineNumberX() As Integer Dim ret As New Integer ret = (6 * Right((Rnd() * Rnd() * Rnd()), 1)) + 2 Return ret End Function
рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдореЗрдВ рдЕрдХрд╛рджрдореА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░реЗрдВ
Private Shared Function GenerateLineNumberSpace() As Integer Dim ret As New Integer ret = (Right(Rnd(), 1)) + 13 Return ret End Function Private Shared Function GenerateLineNumberHeight() As Integer Dim ret As New Integer ret = (2 * Right((Rnd() * Rnd() * Rnd()), 1)) + 1 Return ret End Function
рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдореЗрдВ рдЕрдХрд╛рджрдореА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░реЗрдВ
Private Shared Function GenerateRandomPenColor() As System.Drawing.Pen Dim mypen As New Pen(Brushes.Cyan) Dim ret As New Integer ret = Right((Rnd() * Rnd() * Rnd()), 1) Select Case ret Case 5, 0, 1 mypen.Color = Color.DarkGray Case 6, 2 mypen.Color = Color.DarkRed Case 7, 3, 9 mypen.Color = Color.DarkOliveGreen Case 8, 4 mypen.Color = Color.DarkOrange End Select Return mypen End Function Private Shared Function GenerateRandomBrushColor() As System.Drawing.SolidBrush Dim myBrush As New SolidBrush(Color.Aqua) Dim ret As New Integer ret = Right((Rnd() * Rnd() * Rnd()), 1) Select Case ret Case 5, 0, 1 myBrush.Color = Color.DarkGray Case 6, 2 myBrush.Color = Color.DarkRed Case 7, 3, 9 myBrush.Color = Color.DarkOliveGreen Case 8, 4 myBrush.Color = Color.DarkOrange End Select Return myBrush End Function Public Shared Function GenerateCaptcha(CaptchaString As String) As Bitmap Dim Height As Integer = 60 Dim Width As Integer = 300 Dim objBitmap As Bitmap Dim objGraphics As Graphics
Dim oPoint As New PointF objBitmap = New Bitmap(Width, Height) objGraphics = Graphics.FromImage(objBitmap) 'Draw Background objGraphics.FillRectangle(Brushes.White, 0, 0, Width, Height) objGraphics.DrawRectangle(Pens.Black, 0, 0, Width - 2, Height - 2) 'Draw Text Dim oFont As New Font("Arial", 20) Dim spac As Integer = 5 Dim stringInt As Integer = 1 While stringInt <= CaptchaString.Length spac = spac + GenerateLineNumberSpace() oPoint = New PointF(spac, GenerateLineNumberHeight) objGraphics.DrawString(Mid(CaptchaString, stringInt, 1), oFont, GenerateRandomBrushColor, oPoint) stringInt = stringInt + 1 End While 'White Lines objGraphics.DrawLine(Pens.White, GenerateLineNumberX, GenerateLineNumberY, Width - GenerateLineNumberX(), Height - GenerateLineNumberY()) objGraphics.DrawLine(Pens.White, GenerateLineNumberX, GenerateLineNumberY, Width - GenerateLineNumberX(), Height - GenerateLineNumberY()) objGraphics.DrawLine(Pens.White, GenerateLineNumberX, GenerateLineNumberY, Width - GenerateLineNumberX(), Height - GenerateLineNumberY()) objGraphics.DrawLine(Pens.White, GenerateLineNumberX, GenerateLineNumberY, Width - GenerateLineNumberX(), Height - GenerateLineNumberY()) objGraphics.DrawLine(Pens.White, GenerateLineNumberX, GenerateLineNumberY, Width - GenerateLineNumberX(), Height - GenerateLineNumberY()) objGraphics.DrawLine(Pens.White, GenerateLineNumberX, GenerateLineNumberY, Width - GenerateLineNumberX(), Height - GenerateLineNumberY()) objGraphics.DrawLine(Pens.White, GenerateLineNumberX, GenerateLineNumberY, Width - GenerateLineNumberX(), Height - GenerateLineNumberY()) objGraphics.DrawLine(Pens.White, GenerateLineNumberX, GenerateLineNumberY, Width - GenerateLineNumberX(), Height - GenerateLineNumberY()) objGraphics.DrawLine(Pens.White, GenerateLineNumberX, GenerateLineNumberY, Width - GenerateLineNumberX(), Height - GenerateLineNumberY()) 'Draw Lines objGraphics.DrawLine(GenerateRandomPenColor, GenerateLineNumberX, GenerateLineNumberY, Width - GenerateLineNumberX(), Height - GenerateLineNumberY()) objGraphics.DrawLine(GenerateRandomPenColor, GenerateLineNumberX, GenerateLineNumberY, Width - GenerateLineNumberX(), Height - GenerateLineNumberY())
objGraphics.DrawRectangle(Pens.Black, 0, 0, Width - 2, Height - 2)
Return objBitmap End Function
рдЙрдк RegisterRoutes рдЦреЛрдЬреЗрдВ рдФрд░ рдЕрдВрджрд░ рдПрдХ рдирдпрд╛ рдорд╛рд░реНрдЧ (Routes.MapPageRoute) рдЬреЛрдбрд╝реЗрдВред
Sub RegisterRoutes(ByVal Routes As RouteCollection) Routes.MapPageRoute("Captcha", "Captcha/{GUID}", "~/Data/Images/CaptchaService.aspx") End Sub
рдПрдХ рд╕реЗрд╡рд╛ рдкреГрд╖реНрда рдЬреЛрдбрд╝реЗрдВ
рдбреЗрдЯрд╛ рдлрд╝реЛрд▓реНрдбрд░ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ;
- ClaytabaseAcademy рдкрд░ рд░рд╛рдЗрдЯ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рдФрд░ Add>New Folder рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдлреЛрд▓реНрдбрд░ рдХреЛ рдбреЗрдЯрд╛ рдирд╛рдо рджреЗрдВред
- рдЕрдм рдЗрдореЗрдЬреЗрдЬ рдирд╛рдордХ рдПрдХ рдЕрдиреНрдп рдлреЛрд▓реНрдбрд░ рдХреЛ рдбреЗрдЯрд╛ рдлреЛрд▓реНрдбрд░ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ
- рдЗрд╕рдХреЗ рдмрд╛рдж, рдЗрдореЗрдЬ рдлреЛрд▓реНрдбрд░ рдореЗрдВ CaptchaService.aspx рдирд╛рдордХ рд╡реЗрдмрдлреЙрд░реНрдо рдЬреЛрдбрд╝реЗрдВ
рдпрд╣ рдкреЗрдЬ рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдкрд╣рд▓реЗ рдмрдирд╛рдП рдЧрдП рд░реВрдЯ рд╣реИрдВрдбрд▓рд░ рджреНрд╡рд╛рд░рд╛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
Replace Code
Imports System.Data.SqlClientImports ClaytabaseAcademy.GlobalVariablesImports ClaytabaseAcademy.CaptchaImports System.DrawingImports System.Drawing.ImagingPublic Class CaptchaService Inherits System.Web.UI.Page Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load Dim captchaguid As String = RouteData.Values("GUID").ToString Dim con As New SqlConnection(ConStr) Dim com As New SqlCommand("SELECT captchaValue FROM captcha WHERE captchaGUID='" + captchaguid + "'", con) con.Open() Dim CaptchaBitmap As Bitmap = GenerateCaptcha(com.ExecuteScalar) con.Close() Response.ClearContent() Response.ContentType = "image/bmp" CaptchaBitmap.Save(Response.OutputStream, ImageFormat.Gif) End SubEnd Class
рдПрдХ рд╕реЗрд╡рд╛ рдкреГрд╖реНрда рдЬреЛрдбрд╝реЗрдВ
рдХреНрд▓реЗрдЯрд╛рдмреЗрд╕ рдЕрдХрд╛рджрдореА рдкрд░ рд░рд╛рдЗрдЯ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреА рдЬрдбрд╝ рдореЗрдВ рдкреЗрдЬ рдирд╛рдордХ рдПрдХ рдирдпрд╛ рдлрд╝реЛрд▓реНрдбрд░ рдмрдирд╛рдПрдВ рдФрд░> рдирдпрд╛ рдлрд╝реЛрд▓реНрдбрд░ рдЬреЛрдбрд╝реЗрдВ
CaptchaView рдирд╛рдордХ рдПрдХ рдирдпрд╛ рд╡реЗрдм рдлреЙрд░реНрдо рдЬреЛрдбрд╝реЗрдВ
рдПрдХ рдирдпрд╛ рд╡реЗрдм рдкреЗрдЬ рдмрдирд╛рдПрдВ, рдФрд░ рдПрдХ рдЗрдореЗрдЬ рдХрдВрдЯреНрд░реЛрд▓, рдЯреЗрдХреНрд╕реНрдЯрдмреЙрдХреНрд╕, рдмрдЯрди, рд╣рд┐рдбрдирдлреАрд▓реНрдб рдФрд░ рдПрдХ рд▓реЗрдмрд▓ рдореЗрдВ рдЦреАрдВрдЪреЗрдВ рдпрд╛ рдкреЗрдЬ рдХреЗ рдмреЙрдбреА (рдПрдЪрдЯреАрдПрдордПрд▓ рдкрд╛рд░реНрдЯ) рдореЗрдВ рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдХреЛрдб рдХреЛ рдХреЙрдкреА рдХрд░реЗрдВред<body> <form id="form1" runat="server" style="margin:100px auto;width:300px;padding:10px;background-color:#fff;box-shadow:0 0 3px 0 #222;border-radius: 8px;"> <div style="text-align:center;"> <asp:Image ID="CaptchaImage" runat="server" /> </div> <div style="text-align:center;"> <asp:TextBox ID="captchaEntered" runat="server"></asp:TextBox> </div> <div style="text-align:center;"> <asp:Button ID="captchaSubmit" runat="server" Text="Submit" style="margin:5px auto"/> <asp:HiddenField ID="captchaGuid" runat="server" /> </div> <div style="text-align:center;"> <asp:Label ID="captchaResult" runat="server" Text=""></asp:Label> </div> </form></body>
рдЕрдВрддрд┐рдо рдЪрд░рдг рдпрд╣ рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рд╣реИ рдХрд┐ рдХреЛрдб рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдкреАрдЫреЗ рджрд┐рдП рдЧрдП рдХреЛрдб рдореЗрдВ рдЬрд╛рдирд╛ рд╣реЛрдЧрд╛ (рд░рд╛рдЗрдЯ рдХреНрд▓рд┐рдХ> рдХреЛрдб рджреЗрдЦреЗрдВ) рдФрд░ рдкреАрдЫреЗ рдХреЗ рдХреЛрдб рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ рдЬреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдиреАрдЪреЗ рд╣реИред
рдпрд╣ рдПрдХ рдЙрдк рдмрдирд╛рддрд╛ рд╣реИ рдЬреЛ рдкреЗрдЬ рд▓реЛрдб рдкрд░ рдЪрд▓рддрд╛ рд╣реИ, рдФрд░ рджреВрд╕рд░рд╛ рдЬреЛ рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдЬреЛрдбрд╝реЗ рдЧрдП рдмрдЯрди рдХреЗ рдХреНрд▓рд┐рдХ рдХреЛ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИред
Imports System.Data.SqlClientImports ClaytabaseAcademy.GlobalVariablesPublic Class CaptchaView Inherits System.Web.UI.Page Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load If Not IsPostBack Then Using con As New SqlConnection(ConStr) Using com As New SqlCommand("EXEC dbo.NewCaptchaValue", con) con.Open() Dim Captcha As String = com.ExecuteScalar captchaGuid.Value = Captcha CaptchaImage.ImageUrl = "/Captcha/" + Captcha End Using End Using End If End Sub Protected Sub GetCaptcha(sender As Object, e As EventArgs) Handles captchaSubmit.Click If IsPostBack Then Using con As New SqlConnection(ConStr) Dim valStr As String = Replace(captchaEntered.Text, "'", "''") Dim valGUID As String = Replace(captchaGuid.Value, "'", "''") Response.Write("valStr: " + valStr + "<br>") Response.Write("valGUID: " + valGUID + "<br>") Using com As New SqlCommand("EXEC CaptchaValue '" & valGUID & "','" & valStr & "'", con) con.Open() Dim res As String = com.ExecuteScalar() captchaResult.Text = res End Using Response.Write("EXEC CaptchaValue '" & valGUID & "','" & valStr & "'") End Using End If End SubEnd Class
Test that it has worked by select Build > Build Solution from the Top Menu
You should now be able to test this in a number of ways;- Click on Debug when on the relevant page
- Right Mouse button on the item within the project explorer and selecting View in Browser
- Right Mouse button on the page and select View in Browser
рдХреНрд▓реЗрдЯрд╛рдмреЗрд╕ рджреНрд╡рд╛рд░рд╛ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдбрд┐рдЬрд╛рдЗрди
рдпрд╣ рдХреЛрдб рдХрд╛ рдПрдХ рднрд╛рдЧ рд╣реИ рдЬрд┐рд╕реЗ Ousia рд╕рд╛рдордЧреНрд░реА рдкреНрд░рдмрдВрдзрди рдкреНрд░рдгрд╛рд▓реА рдХреЛрдб рд╕реЗ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рдмрд╛рдЬрд╛рд░ рдкрд░ рд╕рдмрд╕реЗ рддреЗрдЬ рдФрд░ рд╕рдмрд╕реЗ рдЕрдиреБрдХреВрд▓рд┐рдд рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ, рдЬреЛ рд╣рдорд╛рд░реА рд╡реЗрдмрд╕рд╛рдЗрдЯ рдбрд┐рдЬрд╛рдЗрди рд╕реЗрд╡рд╛рдУрдВ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред
рдпреЗ рд▓рдЧрднрдЧ ┬г500 рд╕реЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рд╕рд╛рдЗрдЯреЛрдВ рдХреЗ рд╕рд╛рде рдЙрдкрд▓рдмреНрдз рд╣реИрдВред