0 / 0 / 0
Регистрация: 20.04.2018
Сообщений: 10

Conversion failed when converting the nvarchar value to data type int при подсчете записей

02.12.2019, 08:08. Показов 10386. Ответов 13
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Пытаюсь подсчитать кол-во записей в таблице которые имеют введенный Логин, но встречаю эту ошибку:
System.Data.SqlClient.SqlException: "Conversion failed when converting the nvarchar value 'dsfdsaf' to data type int.",
где dsfdsaf - логин пользователя.
Ошибка появляется здесь:
VB.NET
1
2
SqlCommand UsersCount = new SqlCommand("SELECT COUNT(*) FROM [Clients] WHERE [login] = " + TextBox1.Text, sqlConnection);
                    int count = Convert.ToInt32(UsersCount.ExecuteScalar());
Подскажите, почему так происходит и как это исправить?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
02.12.2019, 08:08
Ответы с готовыми решениями:

Conversion failed when converting the nvarchar value 'Label' to data type int.
Есть сайт Asp.net. Помогите разобраться, на локальном компьютере все работает нормально. Скинул на удаленный хостинг. При событии...

Conversion failed when converting the varchar value 'a1' to data type int
INT DEFAULT ((0)) NOT NULL, using (SqlConnection sqlCon = new SqlConnection(connection)) { ...

The conversion of a nvarchar data type to a datetime data type resulted in an out-of-range value
На моем компе программа работает, а на сервере получаю ошибкуThe conversion of a nvarchar data type to a datetime data type resulted in...

13
 Аватар для sau
2756 / 2058 / 384
Регистрация: 22.07.2011
Сообщений: 7,781
02.12.2019, 12:45
vladuhus, нужен полный текст ошибки , включая данные из stacktrace.
+ скрин части кода с местом ошибки
+ скрин схемы БД

П.С В запросе , значение TextBox1.Text нужно обернуть в кавычки , если login сравнивается со строкой.
+ параметры запроса лучше подставлять через SqlParams , иначе есть риск sql иньекций.
1
0 / 0 / 0
Регистрация: 20.04.2018
Сообщений: 10
02.12.2019, 14:15  [ТС]
Код с ошибкой:
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
using System;
using System.Collections.Generic;
using System.Linq;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace WebApplication1
{
    public partial class LoginSite : System.Web.UI.Page
    {
        public int idcookie;
        public string rules;
            private SqlConnection sqlConnection = null;
        protected async void Page_Load(object sender, EventArgs e)
        {
            string connectionString = ConfigurationManager.ConnectionStrings["DBConnection"].ConnectionString;
            sqlConnection = new SqlConnection(connectionString);
            await sqlConnection.OpenAsync();
        }
 
        protected async void Button1_Click(object sender, EventArgs e)
        {
 
            Dictionary<string, string> db = new Dictionary<string, string>();
            SqlCommand getUsersCredCmd = new SqlCommand("SELECT [login], [password] FROM [Users]", sqlConnection);
            SqlDataReader sqlReader = null;
            try
            {
                sqlReader = await getUsersCredCmd.ExecuteReaderAsync();
                while (await sqlReader.ReadAsync())
                {
                    db.Add(Convert.ToString(sqlReader["login"]), Convert.ToString(sqlReader["password"]));
                }
            }
            catch { }
            finally
            {
                if (sqlReader != null)
                    sqlReader.Close();
            }
           // try
            {
                if (TextBox2.Text == db[TextBox1.Text])
                {
                    SqlCommand UsersCount = new SqlCommand("SELECT COUNT(*) FROM [Clients] WHERE [login] = " + TextBox1.Text, sqlConnection);
                    int count = Convert.ToInt32(UsersCount.ExecuteScalar());
                    if (count > 0)
                    {
                        SqlCommand UserID = new SqlCommand("SELECT [id] FROM [Clients] WHERE [login] = " + TextBox1.Text, sqlConnection);
                        int userid = Convert.ToInt32(UserID.ExecuteScalar());
                        idcookie = userid;
                        rules = "Client";
                    }
                    else
                    {
                        SqlCommand UserID = new SqlCommand("SELECT [id] FROM [Drivers] WHERE [login] = " + TextBox1.Text, sqlConnection);
                        int userid = Convert.ToInt32(UserID.ExecuteScalar());
                        idcookie = userid;
                        rules = "Driver";
                    }
                    HttpCookie rulecookie = new HttpCookie("rules", rules);
                    HttpCookie id = new HttpCookie("id", idcookie.ToString());
                    HttpCookie login = new HttpCookie("login", TextBox1.Text);
                    HttpCookie sign = new HttpCookie("sign", SignGenerator.GetSign(TextBox2.Text + "bytepp"));
                    HttpCookie signrule = new HttpCookie("signrule", SignGenerator.GetSign(rules + "bytepp"));
                    Response.Cookies.Add(login);
                    Response.Cookies.Add(sign);
                    Response.Redirect("WelcomeSite.aspx", false);
                }
                else
                {
                    string script = "alert('Неверный логин или пароль');";
                    ClientScript.RegisterClientScriptBlock(this.GetType(), "MessageBox", script, true);
                }
            }
           // catch
            {
 
               //string script = "alert('Введите логин и пароль');";
                //ClientScript.RegisterClientScriptBlock(this.GetType(), "MessageBox", script, true);
 
            }
 
        }
    }
 }
Миниатюры
Conversion failed when converting the nvarchar value to data type int при подсчете записей   Conversion failed when converting the nvarchar value to data type int при подсчете записей  
0
 Аватар для sau
2756 / 2058 / 384
Регистрация: 22.07.2011
Сообщений: 7,781
02.12.2019, 16:08
vladuhus, хм , откройте как вкладочку "Триггеры" - скорее всего , есть триггер на таблице клиентов.
- ошибка должна быть вида "Недопустимое имя столбца" т.к Вы неправильно запрос строите , но вместо этого , у Вас на уровне БД ошибка конвертации , притом, что в самом запросе никакой конвертации не видно.
0
0 / 0 / 0
Регистрация: 20.04.2018
Сообщений: 10
03.12.2019, 06:34  [ТС]
sau, Нет, триггеров я не создавал, папка абсолютно пустая.
0
 Аватар для sau
2756 / 2058 / 384
Регистрация: 22.07.2011
Сообщений: 7,781
03.12.2019, 09:28
vladuhus, проверьте , работает ли какой либо запрос к таблице Clients
0
0 / 0 / 0
Регистрация: 20.04.2018
Сообщений: 10
03.12.2019, 11:57  [ТС]
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
SqlCommand reguser = new SqlCommand("INSERT INTO [Users] (login, password)VALUES(@login, @password)", sqlConnection);
                reguser.Parameters.AddWithValue("login", TextBox1.Text);
                reguser.Parameters.AddWithValue("password", TextBox2.Text);
                await reguser.ExecuteNonQueryAsync();
                //SqlCommand UserID = new SqlCommand("SELECT [id] FROM [Users] WHERE [login] = " + TextBox1.Text, sqlConnection);
                //SqlDataReader sqlReaderID = null;
                //sqlReaderID = await UserID.ExecuteReaderAsync();
                //int userid = Convert.ToInt32(UserID.ExecuteScalar());
                reguser = new SqlCommand("INSERT INTO [Clients] (name, surname, fathername, phone, login)VALUES(@name, @surname,@fathername,@phone, @login)", sqlConnection);
                reguser.Parameters.AddWithValue("name", TextBox3.Text);
                reguser.Parameters.AddWithValue("surname", TextBox4.Text);
                reguser.Parameters.AddWithValue("fathername", TextBox5.Text);
                reguser.Parameters.AddWithValue("phone", TextBox6.Text);
                reguser.Parameters.AddWithValue("login", TextBox1.Text);
                Response.Redirect("LoginSite.aspx", false);
                await reguser.ExecuteNonQueryAsync();
Запрос на добавление работает. Здесь же не работает выборка id из Users, с той же ошибкой
0
 Аватар для sau
2756 / 2058 / 384
Регистрация: 22.07.2011
Сообщений: 7,781
03.12.2019, 14:13
vladuhus,
покажите содержимое папки Триггеры
1
0 / 0 / 0
Регистрация: 20.04.2018
Сообщений: 10
04.12.2019, 01:18  [ТС]
Вот, пусто
Миниатюры
Conversion failed when converting the nvarchar value to data type int при подсчете записей  
0
Эксперт .NET
 Аватар для kolorotur
17810 / 12961 / 3381
Регистрация: 17.09.2011
Сообщений: 21,250
04.12.2019, 02:49
Цитата Сообщение от vladuhus Посмотреть сообщение
Запрос на добавление работает.
А по какой причине вы не пользуетесь параметризованным запросом при подсчете элементов?
У вас, например, из-за этого строковое значение не в кавычках и запрос выглядит так:
SQL
1
SELECT COUNT(*) FROM [Clients] WHERE [login] = dsfdsaf
Вместо такого:
SQL
1
SELECT COUNT(*) FROM [Clients] WHERE [login] = 'dsfdsaf'
Причина, может, и не в этом, но начните с правильного построения запроса — с использованием параметров.
1
0 / 0 / 0
Регистрация: 20.04.2018
Сообщений: 10
04.12.2019, 11:47  [ТС]
VB.NET
1
SqlCommand UsersCount = new SqlCommand("SELECT COUNT(*) FROM [Clients] WHERE [login] = '" + TextBox1.Text+"'", sqlConnection);
Написал запрос таким образом вроде начал работать. Посмотрим, что будет дальше
0
 Аватар для sau
2756 / 2058 / 384
Регистрация: 22.07.2011
Сообщений: 7,781
04.12.2019, 11:56
vladuhus, странное описание ошибки , причем тут converting to data type int ?...
- обычно , на запрос вида SELECT COUNT(*) FROM [Clients] WHERE [login] = dsfdsaf , должен ругнуться на недопустимое имя столбца. А какой версии сервер БД ?
- может на уровне обьектов сервера есть какой перехват exeption, который пытается обработать некорректный select и валится на преобразовании.
0
0 / 0 / 0
Регистрация: 20.04.2018
Сообщений: 10
04.12.2019, 11:58  [ТС]
SQL Server 2014
P.S.
Как делать упоминание пользователя на этом форуме?
0
Эксперт .NET
 Аватар для kolorotur
17810 / 12961 / 3381
Регистрация: 17.09.2011
Сообщений: 21,250
04.12.2019, 15:32
Цитата Сообщение от vladuhus Посмотреть сообщение
Написал запрос таким образом
Напишите в TextBox1 такую строку:
Code
1
' OR 1 = 1; DROP TABLE [Clients]; --
И поймите уже, почему всегда нужно использовать параметризованные запросы, если значения параметров приходят извне, т.е. находятся вне вашего контроля.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
04.12.2019, 15:32
Помогаю со студенческими работами здесь

Поставщик Microsoft OLE DB для SQL Server (0x80040E07) Error converting data type nvarchar to decimal.
var Text = new String(mySmartUpload.Form.Item('Text').Values); var id_prize = mySmartUpload.Form.Item('id_prize').Values; var id=...

Работа с Sql. Исключение "Error converting data type nvarchar to real"
Здравствуйте, подскажите пожалуйста в чем именно проблема. Выдает ошибку в строчке &quot;while (reader.Read()) x++;reader.Close();&quot;,...

Arithmetic overflow error converting expression to data type int.
Люди, помогите... есть табличка, там столбец типа int (SQL Server 7 bigint нету), так вот когда суммирую все записи по этому столбцу, то...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

Новые блоги и статьи
Вопросы на собеседованиях по микросервисам
ArchitectMsa 27.03.2025
Работодатели ищут не просто разработчиков, знающих базовые концепции, а специалистов, разбирающихся в тонкостях масштабирования, отказоустойчивости и производительности. Сейчас на первый план выходят. . .
Взаимодействие Python с REST API
py-thonny 27.03.2025
REST API - это архитектурный стиль взаимодействия компонентов распределённого приложения в сети. Python располагает функциональным набором инструментов для работы с REST API и основная библиотека для. . .
sshd restrictions, ssh access limitations
jigi33 26.03.2025
sshd restrictions | ssh access limitations рестрикции доступа на сервер sshd статья: https:/ / www. golinuxcloud. com/ restrict-allow-ssh-certain-users-groups-rhel
Компиляция C++ с Clang API
NullReferenced 24.03.2025
Компиляторы обычно воспринимаются как черные ящики, которые превращают исходный код в исполняемые файлы. Мы запускаем компилятор командой в терминале, и вуаля — получаем бинарник. Но что если нужно. . .
Многопоточное программировани­е в C#: Класс Thread
UnmanagedCoder 24.03.2025
Когда запускается приложение на компьютере, операционная система создаёт для него процесс - виртуальное адресное пространство. В C# этот процесс изначально получает один поток выполнения — главный. . .
SwiftUI Data Flow: Передача данных между представлениями
mobDevWorks 23.03.2025
При первом знакомстве со SwiftUI кажется, что фреймворк предлагает избыточное количество механизмов для передачи данных: @State, @Binding, @StateObject, @ObservedObject, @EnvironmentObject и другие. . . .
Моки в Java: Сравниваем Mockito, EasyMock, JMockit
Javaican 23.03.2025
Как протестировать класс, который зависит от других сложных компонентов, таких как базы данных, веб-сервисы или другие классы, с которыми и так непросто работать в тестовом окружении? Для этого и. . .
Архитектурные паттерны микросервисов: ТОП-10 шаблонов
ArchitectMsa 22.03.2025
Популярность микросервисной архитектуры объясняется множеством важных преимуществ. К примеру, она позволяет командам разработчиков работать независимо друг от друга, используя различные технологии и. . .
Оптимизация рендеринга в Unity: Сортировка миллиона спрайтов
GameUnited 22.03.2025
Помните, когда наличие сотни спрайтов в игре приводило к существенному падению производительности? Время таких ограничений уходит в прошлое. Сегодня геймдев сталкивается с задачами совершенно иного. . .
Образование и практика
Igor3D 21.03.2025
Добрый день А вот каково качество/ эффективность ВУЗовского образования? Аналитическая геометрия изучается в первом семестре и считается довольно легким курсом, что вполне справедливо. Ну хорошо,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru