Получать сообщения из хранимой процедуры SQL в VB.Net
Я работаю над созданием формы входа для приложения, над которым я работаю. У меня есть приложение, настроенное для правильного подключения к базе данных и запуска хранимых процедур и запросов к базе данных.
Однако я не уверен, как отправлять сообщения из базы данных в мое приложение VB.Net. Прямо сейчас у меня есть два метода, которые выполняют код для моей базы данных:
Public Function ExecuteCMD(ByRef CMD As SqlCommand) As DataTable
Dim DS As New DataSet()
Try
OpenDBConnection()
CMD.Connection = DB_CONNECTION
If CMD.CommandText.Contains(" ") Then
CMD.CommandType = CommandType.Text
Else
CMD.CommandType = CommandType.StoredProcedure
End If
Dim adapter As New SqlDataAdapter(CMD)
adapter.SelectCommand.CommandTimeout = 300
adapter.Fill(DS)
Catch ex As Exception
Throw New Exception("Database Error: " & ex.Message)
Finally
CloseDBConnection()
End Try
Return DS.Tables(0)
End Function
Public Function ExecuteCMDWithReturnValue(ByRef CMD As SqlCommand) As Boolean
Try
OpenDBConnection()
CMD.Connection = DB_CONNECTION
CMD.Parameters.Add("@ret", SqlDbType.Int).Direction = ParameterDirection.ReturnValue
CMD.CommandType = CommandType.StoredProcedure
CMD.ExecuteNonQuery()
Dim result As Object = CMD.Parameters("@ret").Value
Return If(Convert.ToInt32(result) = 1, False, True)
Catch ex As Exception
Throw New Exception("Database Error: " & ex.Message)
Return False
Finally
CloseDBConnection()
End Try
End Function
Эти функции, честно говоря, работают нормально, но они ужасны для обработки ошибок.
Например, я хотел бы иметь возможность настроить процедуру хранения для входа в приложение, чтобы оно возвращало сообщение "Имя пользователя не найдено" или "Неверный пароль", чтобы я мог точно показать своему пользователю, в чем проблема, как вместо того, чтобы просто возвращать универсальное сообщение "Неправильная информация для входа в систему", возвращая только true или false при входе в систему или нет.
Я, к сожалению, не знаю точно, как это сделать с обеих сторон. Я не знаю, что настроить на стороне SQL Server, чтобы он выкладывал сообщения в процедурах, и я не знаю, как получать эти сообщения в VB.Net.
1 ответ
Вы можете подтвердить свое право пользователя в VB. Я не думаю, что будет хорошей идеей сообщить пользователю, если пароль или имя пользователя неверны (или если оба неверны). Если эти данные защищены паролем, то они должны быть защищены от вредоносных входов в систему. Это поможет хакеру узнать, что случилось.
Private Function VerifyPassword(pword As String, uname As String) As Boolean
Using cn As New SqlConnection(My.Settings.UsersConnectionString)
Dim cmd As New SqlCommand("Select Count(*) From Users Where UserName = @UserName And UserPassword = @Password;", cn)
cmd.Parameters.Add("@UserName", SqlDbType.VarChar, 100).Value = uname
cmd.Parameters.Add("@Password", SqlDbType.VarChar, 100).Value = pword
Try
cn.Open()
Dim i As Integer = CInt(cmd.ExecuteScalar())
If i > 0 Then Return True
Return False
Catch ex As Exception
Throw
Finally
cn.Close()
cmd.Dispose()
End Try
End Using
End Function
Конечно пароль хранится в хеше с солью.