Рейтинг:
1
Graeme_Grant
Бизнес-логика обычно проверяется перед отправкой в БД.:
if (!string.IsNullOrEmpty(UserNameTextBox.Text)
{
bll.UserName = UserNameTextBox.Text;
bll.bl_bind();
if (bll.UserTyp == 0)
{
Response.Redirect("~/ShowMessage.aspx");
}
else
{
// handle invalid (empty) username...
}
rezaeti
привет, спасибо за ответ.
[код удален]
но почему это не работает ? ошибка заключается в следующем :
Ошибка 1 отсутствие перегрузки для метода 'SelectDataUser' принимает 1 аргумент
Graeme_Grant
не оставляйте код в ответах ... слишком трудно читать. Вместо этого, пожалуйста, обновите вопрос с четкими и краткими деталями, образцом кода, любыми сообщениями об ошибках (включая внутренние сведения об исключениях) и т. д., нажав на кнопку Улучшить вопрос виджет.
Чтобы ответить на этот вопрос, это синтаксическая ошибка - вы неправильно вызываете функцию с правильными параметрами.
Рейтинг:
0
Patrice T
SqlCommand cmd = new SqlCommand("Select * from UserInfo where UserName= '" + UserName + "'", connect);
Не решение вашего вопроса, а еще одна проблема, которая у вас есть.
Никогда не создавайте SQL-запрос путем объединения строк. Рано или поздно вы сделаете это с помощью пользовательских вводов, и это откроет дверь уязвимости под названием "SQL injection", она опасна для вашей базы данных и подвержена ошибкам.
Одна кавычка в имени - и ваша программа рухнет. Если пользователь вводит имя типа "Брайан О'Коннер", это может привести к сбою вашего приложения, это уязвимость SQL-инъекции, и сбой-это наименьшая из проблем, вредоносный пользовательский ввод, и он продвигается к командам SQL со всеми учетными данными.
SQL-инъекция-Википедия[
^]
SQL-инъекция[
^]
Атаки SQL-инъекций на примере[
^]
PHP: SQL Injection-руководство пользователя[
^]
Шпаргалка по предотвращению инъекций SQL-OWASP[
^]
Рейтинг:
0
Karthik_Mahalingam
Вы будете иметь, чтобы проверить UserName
для null
значения, прежде чем использовать их
cmd.Parameters.AddWithValue("@UserName", UserName);
или же измените свою процедуру, чтобы принять
null
ценности
@UserName nvarchar(x) = null,
Karthik_Mahalingam
вы не передаете никаких параметров в коде
rezaeti
УМК.Параметры.AddWithValue ("@UserName", Имя Пользователя);
да.selectDataUser(УМК);
но ошибка в : (bl_bind ()) показана.
Ошибка: 'BLL. bllUsers. bl_bind ()': не все пути кода возвращают значение
Dave Kreskowiak
Основываясь на приведенном выше коде, почему вы передаете объект SqlCommand в метод selectDataUser? Он должен создавать свою собственную SqlCommand.
Почему вы не передаете пользователя, что бы это ни было, чтобы метод selectDataUser мог создать сам параметр?
Почему вы добавляете параметр в бизнес-слой вместо уровня данных?
Похоже, вы слишком озабочены уровнями вместо того, чтобы просто заставить код работать. Похоже, вы еще недостаточно опытны, чтобы беспокоиться о ярусах.
rezaeti
Привет, Дэйв Кресковяк .
На самом деле у меня был этот код:
DataTable dt = новый DataTable();
SqlDataAdapter da = new SqlDataAdapter ("select * from UserInfo where UserName=@UserName", connect);
да.Команды selectcommand.Параметры.AddWithValue ("@UserName", UserNameTextBox. Text);
да.Команды selectcommand.CommandTimeout = 0;
да.Заполнить(ДТ);
если (ДТ.Строк.Count = = 0)
{
}
Я хочу знать, как сделать 3-слойную архитектуру для этого кода
Я не знаю, как я могу da. Fill (dt) использовать уровень данных и бизнес-уровень ?
спасибо. можешь ли ты выучить его у меня?..
Karthik_Mahalingam
это означает, что вы не возвращаете значение
опубликуйте свой код метода.
rezaeti
привет Картик
На самом деле у меня был этот код:
DataTable dt = новый DataTable();
SqlDataAdapter da = new SqlDataAdapter ("select * from UserInfo where UserName=@UserName", connect);
да.Команды selectcommand.Параметры.AddWithValue ("@UserName", UserNameTextBox. Text);
да.Команды selectcommand.CommandTimeout = 0;
да.Заполнить(ДТ);
если (ДТ.Строк.Count = = 0)
{
}
Я хочу знать, как сделать 3-слойную архитектуру для этого кода
Я не знаю, как я могу da. Fill (dt) использовать уровень данных и бизнес-уровень ?
спасибо. можешь ли ты выучить его у меня?..
rezaeti
Привет, Дэйв Кресковяк .
На самом деле у меня был этот код:
DataTable dt = новый DataTable();
SqlDataAdapter da = new SqlDataAdapter ("select * from UserInfo where UserName=@UserName", connect);
да.Команды selectcommand.Параметры.AddWithValue ("@UserName", UserNameTextBox. Text);
да.Команды selectcommand.CommandTimeout = 0;
да.Заполнить(ДТ);
если (ДТ.Строк.Count = = 0)
{
}
Я хочу знать, как сделать 3-слойную архитектуру для этого кода
Dave Kreskowiak
Этот код не должен находиться в отдельных слоях. Он самодостаточен, принимает один вход и должен возвращать набор данных на бизнес-уровень.
Он не должен проверять количество строк. Это бизнес-правило.