Kc1998 Ответов: 2

Как получить минимальный баланс


Как сделать минимальный баланс счета типа "сберегательный" и "текущий" меньше 100 и 500, чтобы не было возможности перевести фонд, но я могу перевести баланс меньше 100 и 500 и ничего не будет показывать ошибка

Что я уже пробовал:

Импортирует System.Data.Для oledb
TransferFund Открытый Класс
Dim conn как новое OleDbConnection
Dim insert As New OleDbCommand
Dim del как новая OleDbCommand
Дим обновляются как новый объект oledbcommand
Тусклый запрос как новая OleDbCommand

Дим кон = "поставщика=Майкрософт.Туз.Oledb для.12.0; Источник данных=С:\Пользователи\lingc\рабочий стол\VBNet задания\задание VBNet\бин\отладки\Database41.МБР;"
Private Sub btnBack_Click (sender As Object, e As EventArgs) обрабатывает btnBack.Щелчок
Операция.Покажите()
Меня.Скрыть()

Конец Подводной Лодки

Private Sub btnConfirm_Click (sender As Object, e As EventArgs) обрабатывает btnConfirm.Щелчок
Dim oldbalance1, newbalance1 как Int32
Dim oldbalance2, newbalance2 как Int32
Dim num As Int32
Dim accessdate As DateTime
Dim credit As Boolean = False
Дим balancenum как int32

accessdate = меня.DateTimePicker1.Значение
DateTimePicker1.Формат = DateTimePickerFormat.Обычай
DateTimePicker1.CustomFormat = Датавремя.Сейчас.Метод toString("ДД-ММ-гггг")

Если txtAccountNo.Text < & gt; ""И txtAccountNo2.Text <> "" Затем
oldbalance1 = CInt(txtBalance.Текст)
oldbalance2 = CInt(txtBalance2. Text)
Нум = Кинт(txtTransferAmount.Текст)
newbalance1 = oldbalance1-num

Если txtAccountNo.Text = "Saving" и newbalance1 < 100 затем
кредит = ложь
balancenum = 100
Ключевые слова elseif txtAccountNo.Text = "Current" и newbalance1 < 500 затем
кредит = ложь
balancenum = 500
Еще
кредит = истина
Конец, Если

Если (кредит) Затем
обновленный.Свойства commandtext = "обновление [Подробнее] установить баланс= '" &амп; newbalance1 &ампер; "' где AccountNo='" &амп; txtAccountNo.Текст &"' ;"
обновленный.CommandType = CommandType. Text
обновленный.Соединение = conn
Коннектикут.Открыть()
обновленный.Метод executenonquery()
Коннектикут.Закрывать()

Дим АВС = txtTransferAmount.Текст
АВС = -Азбука

insert. CommandText = " вставить в [транзакцию] (CustomerID, AccountNo, Amount, EntryDate) значения ('" & txtCustomerID.Текст &"', '" & txtAccountNo.Текст &ампер; "', '" &усилителя; конвертировать.ToInt32(АВС) &ампер; "', '" &усилителя; дата и время.Сейчас.Метод toString("гггг-ММ-ДД") &ампер; "');"
insert.CommandType = CommandType. Text
вставлять.Соединение = conn
Коннектикут.Открыть()
вставлять.Метод executenonquery()
Коннектикут.Закрывать()

newbalance2 = oldbalance2 + кол-во
обновленный.Свойства commandtext = "обновление [Подробнее] установить баланс= '" &амп; newbalance2 &ампер; "' где AccountNo='" &амп; txtAccountNo2.Текст &ампер; "' ;"
обновленный.CommandType = CommandType. Text
обновленный.Соединение = conn
Коннектикут.Открыть()
обновленный.Метод executenonquery()
Коннектикут.Закрывать()

вставить.Свойства commandtext = "вставить в [сделка] (Кодклиента, AccountNo, суммы, EntryDate) значения ('" &амп; txtCustomerID2.Текст &ампер; "', '" &амп; txtAccountNo2.Текст &ампер; "', '" &усилителя; конвертировать.ToInt32(txtTransferAmount.Текст) &ампер; "', '" &усилителя; дата и время.Сейчас.Метод toString("гггг-ММ-ДД") &ампер; "');"
insert.CommandType = CommandType. Text
вставлять.Соединение = conn
Коннектикут.Открыть()
вставлять.Метод executenonquery()
Коннектикут.Закрывать()

Ящик для сообщений.Показать ("запись обновлена.")
Еще
Ящик для сообщений.Show (txtAccountType.Текст &ампер; "остаток на счете должен больше чем" &амп; balancenum &ампер; ".")

Конец, Если
Еще
Ящик для сообщений.Show ("Произошел Сбой Транзакции,Пожалуйста, Повторите Попытку.")
Конец, Если

2 Ответов

Рейтинг:
2

OriginalGriff

Начните с того, что научитесь делать все правильно: этот код широко открыт для SQL-инъекций, а это означает, что пользователи могут повредить или уничтожить вашу БД. Это оставляет вас широко открытыми для случайной или преднамеренной атаки SQL-инъекции, которая может уничтожить всю вашу базу данных. Вместо этого используйте параметризованные запросы.
Пока вы это исправляете, вы также должны проверять свои пользовательские данные с помощью TryParse и сообщать о проблемах своим пользователям: на данный момент ваше приложение просто принимает действительность и использует все, что придумает Cint, что может быть неверно.

С функциональной точки зрения вы предполагаете, что баланс, который Вы читаете из текстовых полей, является правильным, и слепо обновляете его в БД, что очень опасно: в основном потому, что вы понятия не имеете, сколько лет данным из ящиков, и в многопользовательской среде это рискованно, поэтому вы должны обновлять баланс непосредственно в БД как "значение + депозит" или что-то подобное, а не просто обновлять с определенным значением.

Исправление их также может избавить вас от вашей проблемы, но если это не так, нам нужно будет точно знать, в чем проблема и где она возникает: мы не можем запустить ваш код, так как у нас нет доступа к вашим данным!


Рейтинг:
2

Patrice T

Существует инструмент, который позволяет вам видеть, что делает ваш код, его имя отладчик Это также отличный инструмент обучения, потому что он показывает вам реальность, и вы можете увидеть, какие ожидания соответствуют реальности.
Когда вы не понимаете, что делает ваш код или почему он делает то, что делает, ответ таков: отладчик.
Используйте отладчик, чтобы увидеть, что делает ваш код. Просто установите точку останова и посмотрите, как работает ваш код, отладчик позволит вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения.

Отладчик-Википедия, свободная энциклопедия[^]
Visual Basic / Visual Studio Video Tutorial-Базовая Отладка-YouTube[^]
Visual Basic .NET programming for Beginners - точки останова и инструменты отладки[^]
Отладчик здесь для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.
В отладчике нет никакой магии, он не находит ошибок, он просто помогает вам. Когда код не делает того, что ожидается, вы близки к ошибке.
-----
Не решение вашего вопроса, а еще одна проблема, которая у вас есть.
Никогда не создавайте SQL-запрос путем объединения строк. Рано или поздно вы сделаете это с помощью пользовательских вводов, и это откроет дверь уязвимости под названием "SQL injection", она опасна для вашей базы данных и подвержена ошибкам.
Одна кавычка в имени - и ваша программа рухнет. Если пользователь вводит имя типа "Брайан О'Коннер", это может привести к сбою вашего приложения, это уязвимость SQL-инъекции, и сбой-это наименьшая из проблем, вредоносный пользовательский ввод, и он продвигается к командам SQL со всеми учетными данными.
SQL-инъекция-Википедия[^]
SQL-инъекция[^]