Member 13700339 Ответов: 3

Как извлечь данные из базы данных и отобразить их на этикетке


Я работаю над регистрационной страницей для системы Lucky Draw.Таким образом, процесс регистрации заключается в том, что пользователь должен сканировать свой штрих-код с помощью usb-сканера штрих-кодов. Я застрял на той части, которая не может проверить идентификатор сотрудника в базе данных после сканирования пользователя или ввода в текстовое поле. Я также хочу отобразить имя сотрудника после сканирования штрих-кода.Может ли кто-нибудь дать мне несколько идей/решений.

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

Ниже приведен мой код:

using System;  
using System.Collections.Generic;  
using System.Data;  
using System.Data.SqlClient;  
using System.IO;  
using System.Linq;  
using System.Web;  
using System.Web.UI;  
using System.Web.UI.WebControls;
public partial class Attendance : System.Web.UI.Page  
{  
    SqlCommand cmd = new SqlCommand();  
    SqlConnection con = new SqlConnection();  
    string str;  
    private string connectionString;  
  
    protected void Page_Load(object sender, EventArgs e)  
    {  
        con.ConnectionString = @"Data Source= (LocalDB)\MSSQLLocalDB; AttachDbFilename =   
          C:\Users\Nor  Asyraf  Mohd No\source\repos\LuckyDraw\LuckyDraw\App_Data\ticket.mdf;   
            Integrated Security = True";
        txtText.Focus();  
    }  
  
    protected void btnSave_Click(object sender, EventArgs e)  
    {  
        idcheck();  
        using (SqlConnection connection = new SqlConnection(connectionString))  
        {  
            using (SqlCommand command = connection.CreateCommand())  
            {  
                command.CommandText = "UPDATE EMPLOYEES SET Attendance = 'Present' WHERE EMP_ID = @id";  
                command.Parameters.AddWithValue("@id", txtText.Text);  
                connection.Open();  
  
                command.ExecuteNonQuery();  
  
                connection.Close();  
            }  
        }
    }  
  
public void idcheck()  
        {
        string query = "select EMP_ID from EMPLOYEES where EMP_ID='" + txtText.Text + "'";  
        SqlDataAdapter ada = new SqlDataAdapter(query, con);  
        DataTable dt = new DataTable();  
        ada.Fill(dt);  
        if (dt.Rows.Count > 0)  
        {  
            lblError.Text = dt.Rows[0]["EMP_NAME"].ToString();  
        }  
    }
    protected void Button1_Click1(object sender, EventArgs e)  
    {  
        Response.Redirect("Default.aspx");  
    }  
}

Bryian Tan

что за сообщение об ошибке? попробуйте выполнить обновление с целым числом. команда.Параметры.AddWithValue("@id", 1);

Второй запрос не имеет EMP_NAME в операторе select.

Member 13700339

Сообщение об ошибке:

System.Data.SqlClient.SqlException: 'попытка прикрепить базу данных с автоматическим именем для файла C:\Users\Nor Asyraf Mohd No\Documents\Visual Studio 2017\LuckyDraw\LuckyDraw\App_Data\ticket.mdf не удалось. База данных с таким же именем существует, или указанный файл не может быть открыт, или он находится на общем ресурсе UNC.'

Richard Deeming

string query = "select EMP_ID from EMPLOYEES where EMP_ID='" + txtText.Text + "'";


Этот код уязвим для SQL-инъекция[^]. НИКОГДА используйте конкатенацию строк для построения SQL-запроса. ВСЕГДА используйте параметризованный запрос.

Вы уже знаете, как использовать параметры - вы правильно используете их в btnSave_Click метод.

Все, что вы хотели знать о SQL-инъекции (но боялись спросить) | Трой Хант[^]
Как я могу объяснить SQL-инъекцию без технического жаргона? | Обмен Стеками Информационной Безопасности[^]
Шпаргалка по параметризации запросов | OWASP[^]

3 Ответов

Рейтинг:
2

dkamble 10358990

добавьте EMP_NAME в запрос select и, если EMP_ID является целым числом, удалите одинарные кавычки из условия where


Рейтинг:
1

Vishal S. Kumbhar

Учитывая, что ваш столбец ID является interger, то вы должны исправить эти строки
"выберите EMP_ID из списка сотрудников, где EMP_ID='" + txtText.Текст + "'"; "

как "select EMP_ID from EMPLOYEES where EMP_ID=" + txtText.Текст + " "; " удалить одинарные кавычки.


Рейтинг:
0

Member 8583441

Выполните команду sqlcommand строку Select * из таблицы базы данных из ваших
Попробуйте выполнить с помощью
объект DataReader = ЦМД.ExecuteReader() и считывает данные из базы данных следующим образом
если(объект DataReader.Читать())
этикетка.InnerText = datareader["EmpID"].Метод toString();

Здесь я использую &ЛТ;ярлык&ГТ; тег вместо &ЛТ;АСП:этикетки и GT; тег.... Это сработало для меня попробуйте это