ASP.NET получает данные с SQL Server

Я пытаюсь получить имя сотрудника из базы данных и заполнить его в текстовом поле для соответствующего идентификатора сотрудника.

Я попробовал этот код, но на странице ничего не происходит. Он просто перезагружается, а текстовое поле (имя) остается пустым.

SqlConnection con = new SqlConnection(@"Data Source=DESKTOP-0FUUV7B\SQLEXPRESS;Initial Catalog=EmployeeDetails;Integrated Security=True");
con.Open();
           
SqlCommand cmd = new SqlCommand("select * from ProfessionalDetails where EmpId='"+EmployeeId.Text+"'", con);
          
SqlDataReader da = cmd.ExecuteReader();

while (da.Read())
{
    Name.Text = da.GetValue(1).ToString();
}
            
con.Close();

Вы отладили его и нашли, в чем проблема, потому что код высокого уровня выглядит нормально, поэтому существует много возможностей проблемы, например, EmployeeId.Text имеет значение null, не может подключиться к db, da.GetValue (1) имеет значение null. Итак, сначала добавьте try и catch, затем отладьте его и найдите строку, в которой проблема,

Pradeep Kumar 19.11.2022 10:24
Как настроить Tailwind CSS с React.js и Next.js?
Как настроить Tailwind CSS с React.js и Next.js?
Tailwind CSS - единственный фреймворк, который, как я убедился, масштабируется в больших командах. Он легко настраивается, адаптируется к любому...
LeetCode запись решения 2536. Увеличение подматриц на единицу
LeetCode запись решения 2536. Увеличение подматриц на единицу
Увеличение подматриц на единицу - LeetCode
Переключение светлых/темных тем
Переключение светлых/темных тем
В Microsoft Training - Guided Project - Build a simple website with web pages, CSS files and JavaScript files, мы объясняем, как CSS можно...
Отношения "многие ко многим" в Laravel с методами присоединения и отсоединения
Отношения "многие ко многим" в Laravel с методами присоединения и отсоединения
Отношения "многие ко многим" в Laravel могут быть немного сложными, но с помощью Eloquent ORM и его моделей мы можем сделать это с легкостью. В этой...
В PHP
В PHP
В большой кодовой базе с множеством различных компонентов классы, функции и константы могут иметь одинаковые имена. Это может привести к путанице и...
Карта дорог Беладжар PHP Laravel
Карта дорог Беладжар PHP Laravel
Laravel - это PHP-фреймворк, разработанный для облегчения разработки веб-приложений. Laravel предоставляет различные функции, упрощающие разработку...
0
2
117
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Лучшим решением является выполнение оператора sql через параметризованное значение. Подробности этого процесса приведены ниже:

 using (SqlConnection con = new SqlConnection(live_connectionString))
        {
            using (SqlCommand cmd = new SqlCommand("Query", con))
            {
                con.Open();
                cmd.CommandType = CommandType.Text;
                cmd.Parameters.AddWithValue("@EmpId", employeeId);

                SqlDataAdapter da = new SqlDataAdapter();
                da.SelectCommand = cmd;
                var ds = new DataSet();
                da.Fill(ds);
             

                string? name = ds.Tables[0].Rows[1]["Variable name"].ToString();
              
              Name.Text =name;
            };
        }
    }
AddWithValue тоже нехорошее решение, это "зло".
Larnu 19.11.2022 11:55

Если вы не хотите указывать тип параметров, вам следует использовать эти функции. Неплохо использовать это, это также мешает нам в Sql-инъекциях.

Rizwan 19.11.2022 13:14

Другой способ использования функции Add(), которая также содержит тип, о котором я говорил в предыдущем комментарии.

Rizwan 19.11.2022 13:16

«Неплохо использовать это», это, безусловно, может быть; типы данных, которые он передает, могут быть неправильными и привести к тому, что запрос будет несовместимым с SARG. Это плохо и может быть ужасно для производительности.

Larnu 19.11.2022 16:40

Как упоминалось выше в комментариях, у вас много проблем.

Вы должны использовать использование с соединением, чтобы избавиться от них.

Вы должны использовать параметризованные запросы, чтобы избежать внедрения SQL.

Поместите свой код в try catch, чтобы вы могли легко определить основную причину проблемы.

Определите строку подключения в файле конфигурации три, чем определение в коде С#.

Вам не нужно выбирать все столбцы. И, пожалуйста, избегайте select * в запросе, вместо этого просто напишите имя своего столбца, так как вы хотите выбрать здесь только один столбец.

Вы можете использовать ExecuteScalar, он используется, когда вы ожидаете одно значение.

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

Как уже отмечалось, используйте параметры, и ЛУЧШЕ используйте СТРОГО типизированные параметры.

И нет необходимости использовать набор данных, это одна таблица, поэтому используйте таблицу данных.

Таким образом:

        string strSQL = 
            @"select * from ProfessionalDetails where EmpId= @ID";

        using (SqlConnection con = new SqlConnection(Properties.Settings.Default.TEST4))
        {
            using (SqlCommand cmd = new SqlCommand(strSQL, con))
            {
                con.Open();
                cmd.Parameters.Add("@ID", SqlDbType.Int).Value = EmployeeID.Text;
                DataTable rstData = new DataTable();
                rstData.Load(cmd.ExecuteReader());
                if (rstData.Rows.Count > 0)
                    Name.Text = rstData.Rows[0]["Name"].ToString();
            }
        }

Другие вопросы по теме