Форум программистов, компьютерный форум, киберфорум
C#: ASP.NET MVC
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/55: Рейтинг темы: голосов - 55, средняя оценка - 4.62
0 / 0 / 0
Регистрация: 20.04.2018
Сообщений: 10

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

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

Студворк — интернет-сервис помощи студентам
Пытаюсь подсчитать кол-во записей в таблице которые имеют введенный Логин, но встречаю эту ошибку:
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
2773 / 2073 / 386
Регистрация: 22.07.2011
Сообщений: 7,820
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
2773 / 2073 / 386
Регистрация: 22.07.2011
Сообщений: 7,820
02.12.2019, 16:08
vladuhus, хм , откройте как вкладочку "Триггеры" - скорее всего , есть триггер на таблице клиентов.
- ошибка должна быть вида "Недопустимое имя столбца" т.к Вы неправильно запрос строите , но вместо этого , у Вас на уровне БД ошибка конвертации , притом, что в самом запросе никакой конвертации не видно.
0
0 / 0 / 0
Регистрация: 20.04.2018
Сообщений: 10
03.12.2019, 06:34  [ТС]
sau, Нет, триггеров я не создавал, папка абсолютно пустая.
0
 Аватар для sau
2773 / 2073 / 386
Регистрация: 22.07.2011
Сообщений: 7,820
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
2773 / 2073 / 386
Регистрация: 22.07.2011
Сообщений: 7,820
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
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
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
2773 / 2073 / 386
Регистрация: 22.07.2011
Сообщений: 7,820
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
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
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
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru