|
Posted by pbd22 on 06/05/07 14:17
On Jun 4, 8:15 pm, "Plamen Ratchev" <Pla...@SQLStudio.com> wrote:
> Ok, now it is more clear what you are trying to do... :)
>
> Yes, stored procedure is best here, as it can reuse previously cached
> execution plan. Perhaps something like this:
>
> CREATE PROCEDURE ConfirmUserRegistration
> @confirmation_cd NVARCHAR(50)
> AS
>
> SET NOCOUNT ON;
>
> BEGIN TRY
>
> BEGIN TRAN
>
> INSERT INTO Users
> (egdate,
> pass,
> role,
> squestion,
> sanswer,
> zcode,
> altemail,
> email,
> bdaymonth,
> bdayday,
> bdayyear,
> gender,
> sitename,
> city,
> state,
> country,
> lastName,
> firstName)
> SELECT regdate,
> pass,
> role,
> squestion,
> sanswer,
> zcode,
> altemail,
> email,
> bdaymonth,
> bdayday,
> bdayyear,
> gender,
> sitename,
> city,
> state,
> country,
> lastName,
> firstName
> FROM TempRegistration
> WHERE confirm = @confirmation_cd;
>
> COMMIT TRAN;
>
> END TRY
> BEGIN CATCH
>
> IF (XACT_STATE()) = -1
> BEGIN
> ROLLBACK TRAN;
> END
> ELSE IF (XACT_STATE()) = 1
> BEGIN
> COMMIT TRAN;
> END
>
> DECLARE
> @ErrorMessage NVARCHAR(4000),
> @ErrorSeverity INT,
> @ErrorState INT,
> @ErrorNumber INT,
> @ErrorLine INT,
> @ErrorProcedure NVARCHAR(200),
> @ErrMessage NVARCHAR(4000);
>
> SELECT
> @ErrorMessage = ERROR_MESSAGE(),
> @ErrorSeverity = ERROR_SEVERITY(),
> @ErrorState = ERROR_STATE(),
> @ErrorNumber = ERROR_NUMBER(),
> @ErrorLine = ERROR_LINE(),
> @ErrorProcedure = COALESCE(ERROR_PROCEDURE(), '-');
>
> SET @ErrMessage = N'Error %d, Level %d, State %d, Procedure %s, Line %d, '
> +
> N'Message: '+ ERROR_MESSAGE();
>
> RAISERROR(
> @ErrMessage,
> @ErrorSeverity,
> 1,
> @ErrorNumber,
> @ErrorSeverity,
> @ErrorState,
> @ErrorProcedure,
> @ErrorLine
> );
>
> END CATCH;
>
> GO
>
> Then in your code call the SP like this (I just typed here, please check for
> syntax, I've been using more C# lately and could be missing something):
>
> Using connection As New
> SqlConnection(ConfigurationManager.ConnectionStrings("myConnStr").ConnectionString)
>
> Try
> Dim command As SqlCommand = New SqlCommand( _
> "ConfirmUserRegistration",
> connection)
> command.CommandType = CommandType.StoredProcedure
>
> Dim parameter As SqlParameter = command.Parameters.Add( _
> "@confirmation_cd ",
> SqlDbType.NVarChar, _
> 50)
> parameter.Value = "8c37a0737eegd64532rgdf56g5ec3f75aab5d9e7a712077"
>
> command.Connection.Open()
> command.ExecuteNonQuery()
>
> Catch exSQL As SqlException
> ' Log and show error
>
> Catch exGen As Exception
> ' Log and show error
>
> End Try
>
> End Using
>
> HTH,
>
> Plamen Ratchevhttp://www.SQLStudio.com
Thanks again Plamen. This thread has been very helpful.
I have a final question. How do I handle cases where the confirmation
code
doesn't exist? Say a user is trying to guess a code - How would the
stored procedure catch a mismatch and return the result to VB.NET so
the appropriate message can be sent to the user?
Thanks again for all your help.
Peter
Navigation:
[Reply to this message]
|