Member 13700339 Ответов: 2

Не удается получить данные из базы данных


Привет, ребята, я хочу получить данные с sql server, но мой код не работает. Он не показывает никакой ошибки. Но он по-прежнему не может отображать данные. Кто - нибудь может мне помочь. Спасибо

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

использование системы;
использование системы.Коллекции.Общий;
использование системы.Конфигурация;
используя системы.Данных.Поставщики sqlclient;
использование System.Linq;
использование системы.Сеть;
использование System.Web.UI;
используя системы.Веб.Пользовательского интерфейса.WebControls;
использование System.Data;
использование System.Data.Odbc;
использование системы.Коллекции.Специализированный;
использование System.Text;
используя системы.Веб.Пользовательского интерфейса.WebControls.элемент webPart;
используя системы.Веб.Пользовательского интерфейса.HtmlControls;
использование системы.Рисование;


открытый частичный класс EditStatus : System.Web.UI.Page
{
строка connectionString = @"источник данных=P13L1TNN225\SQLEXPRESS; начальный каталог = EMPLOYEE1; Интегрированная безопасность=True;";
SqlCommand cmd = новая команда SqlCommand();
SqlConnection con = новый SqlConnection();
SqlDataAdapter sda = новый SqlDataAdapter();
DataSet ds = новый набор данных();


охраняемых недействительными в(объект отправителя, EventArgs в электронной)
{



using (SqlConnection con = new SqlConnection(connectionString))
{
string query = "Select * from Ticket where TicketID='" + TicketID.Текст + "'";

используя (sqlcommand, который команду cmd = новый sqlcommand, который(запрос, кон))
{
против.Открыть();

SqlDataReader dr = cmd.Метода executereader();
если (dr.Read())
{
TicketID.Text = dr["TicketID"].Метод toString();
лблемпид.Text = dr["Emp_id"].Метод toString();
lblEmpName.Text = dr["Emp_Name"].Метод toString();
lblEmpEmail.Текст = доктор["Emp_Email"].Метод toString();
lblCnum.Текст = доктор["Emp_Cnum"].Метод toString();
лблдпт.Текст = доктор["Emp_Dpt"].Метод toString();
lblPlant.Текст = доктор["Emp_Plant"].Метод toString();
lblSeverity.Текст = доктор["Emp_Severity"].Метод toString();
lblSubject.Текст = доктор["Emp_Subject"].Метод toString();
лблдскри.Текст = доктор["Emp_Dscri"].Метод toString();
lblStatus.Текст = доктор["Emp_Status"].Метод toString();
lblDatetime.Text = dr["Datetime"].Метод toString();

}
против.Закрывать();
против.Располагать();

}

}

2 Ответов

Рейтинг:
1

OriginalGriff

Две вещи:
1) он не отображает никаких данных, потому что ни одна строка не совпадает. Проверьте, что именно у вас есть в TicketID.Текст, а затем вручную просмотрите свою базу данных для получения именно этой строки. Для успешного сравнения "=" строки должны точно совпадать, включая любые пробелы.

2) Не делайте этого так! Никогда не объединяйте строки для построения команды SQL. Это оставляет вас широко открытыми для случайной или преднамеренной атаки SQL-инъекции, которая может уничтожить всю вашу базу данных. Вместо этого используйте параметризованные запросы.

Когда вы объединяете строки, вы вызываете проблемы, потому что SQL получает такие команды, как:

SELECT * FROM MyTable WHERE StreetAddress = 'Baker's Wood'
Цитата, добавленная пользователем, завершает строку в том, что касается SQL, и вы получаете проблемы. Но могло быть и хуже. Если я приду и наберу вместо этого: "x';DROP TABLE MyTable;--", то SQL получит совсем другую команду:
SELECT * FROM MyTable WHERE StreetAddress = 'x';DROP TABLE MyTable;--'
Которые SQL видит как три отдельные команды:
SELECT * FROM MyTable WHERE StreetAddress = 'x';
Совершенно правильный выбор
DROP TABLE MyTable;
Вполне допустимая команда "удалить таблицу"
--'
А все остальное-это комментарии.
Так оно и происходит: выбирает любые совпадающие строки, удаляет таблицу из базы данных и игнорирует все остальное.

Поэтому всегда используйте параметризованные запросы! Или будьте готовы часто восстанавливать свою БД из резервной копии. Вы ведь регулярно делаете резервные копии, не так ли?


Рейтинг:
0

GKP1992

Вы написали код на странице load event, пожалуйста, отладьте и убедитесь, что у вас действительно есть некоторые данные в "TicketID.Text". Если нет, вызовите этот код для какого-либо другого события после того, как вы передали данные TicketID, возможно, для события нажатия кнопки.

Я также предлагаю вам получить хорошее представление о ASP.Net жизненный цикл страницы (вы найдете несколько хороших статей по CP).

Еще один момент, Это не очень хорошая идея, чтобы писать SQL-запросы так, как вы написали.

Это называется сцепленные SQL-запросов и их внедрение уязвимости к SQL-инъекции.
Предположим, пользователь вводит следующий текст в текстовое поле TicketID "56; drop table XYZ;"
Теперь, когда вы объедините это значение в строке SQL, вы получите две инструкции: одна-получить данные для данного идентификатора билета, а другая-удалить таблицу XYZ.
Это серьезная проблема, вы не хотите, чтобы пользователи могли удалять таблицы из вашей базы данных.

Лучшим подходом является написание параметризованных SQL-запросов. Читайте об этом подробнее здесь.