Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/40: Рейтинг темы: голосов - 40, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 20.01.2016
Сообщений: 3

Ошибка "Входная строка имела неверный формат"

20.01.2016, 13:50. Показов 8488. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!
Нужна помощь! Изучаю C#. Пишу программу. Выскакивает такое сообщение об ощибке: Входная строка имела неверный формат. Помогите пожалуйста.
связь таблиц один-к-одному
используется mssql server 2014
C#
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
private void buttonEdit_Click(object sender, EventArgs e)
        {
            int ehrpatientid;
            int patientid = int.Parse(this.textBoxPatientId.Text);            
            string sex = Convert.ToString(this.comboBoxSex.SelectedItem);
            string rh = Convert.ToString(this.comboBoxRh.SelectedItem);
            string lastname = Convert.ToString(this.textBoxLastName.Text);
            string firstname = Convert.ToString(this.textBoxFirstName.Text);
            string patronymic = Convert.ToString(this.textBoxPatronymic.Text);                                          
            DateTime birthday = dateTimePickerBirthday.Value;
            DateTime registration = dateTimePickerRegistration.Value;
            DateTime deregistration = dateTimePickerDeregistration.Value;
            string bloodtype = Convert.ToString(this.comboBoxBloodType.SelectedItem);          
            int diseaseid = int.Parse(this.textBoxDisease.Text);
 
            string connectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
            using (SqlConnection connection = new SqlConnection(connectionString))
            {
                connection.Open();
 
                SqlTransaction sqlTran = connection.BeginTransaction();
                SqlCommand command = connection.CreateCommand();
                command.Transaction = sqlTran;                
                try
                {                    
                    command.CommandText = "UPDATE EHR SET disease_id=@diseaseid, registration=@registration, deregistration=@deregistration, blood_type=@bloodtype, rh=@rh WHERE patient_id=@patientid";
                    var pID = new SqlParameter();
                    pID.ParameterName = "ehrpatientid";
                    pID.Size = 4;
                    pID.Direction = ParameterDirection.Output;
                    command.Parameters.Add(pID);
                    command.Parameters.Add("@patientid", SqlDbType.Int).SourceColumn = "patient_id";
                    command.Parameters["@patientid"].Value = patientid;
                    command.Parameters.Add("@diseaseid", SqlDbType.Int).SourceColumn = "disease_id";
                    command.Parameters["@diseaseid"].Value = diseaseid;
                    command.Parameters.Add("@registration", SqlDbType.Date).SourceColumn = "registration";
                    command.Parameters["@registration"].Value = registration;                   
                    command.Parameters.Add("@deregistration", SqlDbType.Date).SourceColumn = "deregistration";
                    command.Parameters["@deregistration"].Value = deregistration;                    
                    command.Parameters.Add("@bloodtype", SqlDbType.VarChar).SourceColumn = "blood_type";
                    command.Parameters["@bloodtype"].Value = bloodtype;
                    command.Parameters.Add("@rh", SqlDbType.VarChar).SourceColumn = "rh";
                    command.Parameters["@rh"].Value = rh;                   
                    command.ExecuteNonQuery();
 
                    ehrpatientid = Int32.Parse(pID.Value.ToString());
                    
                      /*ошибка появляется, начиная отсюда*/
                    //command.CommandText = "UPDATE patients SET [last name]=@lastname, [first name]=@firstname, patronymic=@patronymic, sex=@sex, birthday=@birthday WHERE patient_id=@patientid";
                    command.CommandText = "UPDATE patients SET patient_id=@patientid, [last name]=@lastname";
                    command.Parameters.Add("@patientid", SqlDbType.Int).SourceColumn = "patient_id";
                    command.Parameters["@patientid"].Value = ehrpatientid;
                    command.Parameters.Add("@lastname", SqlDbType.VarChar).SourceColumn = "[last name]";
                    command.Parameters["@lastname"].Value = lastname;
                    /*command.Parameters.Add("@firstname", SqlDbType.VarChar).SourceColumn = "[first name]";
                    command.Parameters["@firstname"].Value = firstname;
                    command.Parameters.Add("@patronymic", SqlDbType.VarChar).SourceColumn = "patronymic";
                    command.Parameters["@patronymic"].Value = patronymic;
                    command.Parameters.Add("@sex", SqlDbType.VarChar).SourceColumn = "sex";
                    command.Parameters["@sex"].Value = sex;                    
                    command.Parameters.Add("@birthday", SqlDbType.Date).SourceColumn = "birthday";
                    command.Parameters["@birthday"].Value = birthday; */                   
                    command.ExecuteNonQuery();
                    
                    sqlTran.Commit();
                    MessageBox.Show("Изменения внесены", "Изменение записи");
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);                                       
                    try
                    {
                        sqlTran.Rollback();
                    }
                    catch (Exception exRollback)
                    {
                        MessageBox.Show(exRollback.Message);                 
                    }
                }
            }
        }
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.01.2016, 13:50
Ответы с готовыми решениями:

Ошибка при добавлении данных в SQL SERVER (входная строка имела неверный формат)
Народ, помогите пожалуйста решить такую проблему: Есть приложение работающее с БД SQL SERVER. При добавлении какой-либо записи в форму,...

Входная строка имела неверный формат
Доброго времени суток, у меня такая проблема, что я не могу понять в чем ошибка, а именно есть код Random rnd = new Random(); ...

Входная строка имела неверный формат
Помогите, не могу добавить с помощью Insert. Пишет, что входная строка имела неверный формат. Весь нет облазил void...

8
 Аватар для Spectral-Owl
608 / 583 / 157
Регистрация: 29.06.2010
Сообщений: 1,620
20.01.2016, 14:48


скорее всего при вызове метода Parse внутри textBox стоят недопустимые символы.
0
0 / 0 / 0
Регистрация: 20.01.2016
Сообщений: 3
20.01.2016, 15:04  [ТС]
вот еще не дописал, что ошибка появляется, когда я в транзакцию добавляю второй запрос, который с названием таблицы patients. Если оставить только запрос с таблицей EHR, то всё выполняется.
И еще, есть запрос с теми же параметрами, но только не update, а insert. Так вот, он полностью выполняется с двумя запросами в те же таблицы.
0
 Аватар для Spectral-Owl
608 / 583 / 157
Регистрация: 29.06.2010
Сообщений: 1,620
20.01.2016, 15:22
уберите обработчик try{..} catch{..}, и будете знать на какой именно строчке у вас ошибка, компилятор сам её покажет. Потом отлаживаете свой код для различных входных параметров, пишите обработки текста внутри текст-боксов, и уже в релизную версию возвращаете богомерзкого трюкача.

Добавлено через 12 минут
Как вариант,
Цитата Сообщение от earwig Посмотреть сообщение
command.Parameters.Add("@patientid", SqlDbType.Int).SourceColumn = "patient_id";
в этот (patient_id) столбец добавляются исключительно числа формата int32 и исключительно в десятеричном формате? возможно это стоит отслеживать.

или вот
Цитата Сообщение от earwig Посмотреть сообщение
command.Parameters.Add("@lastname", SqlDbType.VarChar).SourceColumn = "[last name]";
VarChar - какой длинны строку позволяет в себя ложить? а какая ложиться по факту?
0
0 / 0 / 0
Регистрация: 20.01.2016
Сообщений: 3
20.01.2016, 15:37  [ТС]
Убрал обработчик try{..} catch{..}. Теперь подсвечивает ошибку в строке
C#
1
ehrpatientid = Int32.Parse(pID.Value.ToString());
Но как исправить?
Во все строки добавляются только разрешенные символы, т.е. просто не получится ввести их. Длина строки также ограничена.
0
 Аватар для Spectral-Owl
608 / 583 / 157
Регистрация: 29.06.2010
Сообщений: 1,620
20.01.2016, 16:54
может дело в том что pID.Value не является int32. более того, если является, то я не понимаю смысл всей этой конструкции, когда число переводят в строку чтоб потом перевести в число.

банально с парочкой if реально обойти эту проблему, да и способ приведения Convert.ToInt32(...) мне нравится больше.

Добавлено через 6 минут
к примеру:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
ehrpatientid = 0;
if(pID.Value!=null)
{
//можно вообще все типы перебрать, но... нужно ли? да и коряво выглядит.
if ((pID.Value is Int32) ||(pID.Value is Int16)||(pID.Value is UInt16)||(pID.Value is Byte))
ehrpatientid = Convert.ToInt32(pID.Value);
 
//это float, с точкой, пользователь может поставить запятую, перебирать форматы влом
if(pID.Value is Single)
ehrpatientid = Convert.ToInt32(Convert.ToSingle(pID.Value.ToString().Replase(".",",")));
 
//double, та же тема. 
if(pID.Value is Double)
ehrpatientid = Convert.ToInt32(Convert.ToDouble(pID.Value.ToString().Replase(".",",")));
}
вообще способ довольно коряв, его можно улучшить бесконечное число раз, он просто показать, что выход есть.
0
785 / 616 / 273
Регистрация: 04.08.2015
Сообщений: 1,713
20.01.2016, 18:15
Цитата Сообщение от earwig Посмотреть сообщение
pID.Direction = ParameterDirection.Output;
Параметр объявлен как Output, но в самом запросе выполняется только обновление записи и нет присваивания значения параметру. Ну а null приводить к int бесполезно.l
0
 Аватар для m0nax
1274 / 975 / 113
Регистрация: 12.01.2010
Сообщений: 1,971
20.01.2016, 22:52
выноси логику из обработчиков событий, используй ORM, хоть большой EF/nhibernate, хоть мини аналоги типа Petapoco - что угодно только не это
иначе тебя однажды поймают программисты которые унаследовали твой говнокод и отрежут пальцы
просто осознай этот факт - весь код из первого поста можно оптимизировать до 1 строки и одновременно решить 85% текущих и будущих проблем
0
 Аватар для Spectral-Owl
608 / 583 / 157
Регистрация: 29.06.2010
Сообщений: 1,620
21.01.2016, 08:27
Цитата Сообщение от Igr_ok Посмотреть сообщение
Ну а null приводить к int бесполезно.l
Цитата Сообщение от Spectral-Owl Посмотреть сообщение
if(pID.Value!=null)
!=
в моём примере как раз таки если значение в базе будет null, локальное значение останется нулем.
вопросы отпали бы сами собой еслиб увидел описание этого класса
var pID = new SqlParameter();

m0nax, с вами я не согласен, если человек только изучает C#, как он написал в первом посту, вряд ли его проекты будут кем то унаследованы, а набить себе шишек и набраться опыта можно больше, когда сам велосипеды пишешь.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.01.2016, 08:27
Помогаю со студенческими работами здесь

Входная строка имела неверный формат
Не совсем понятно почему он работает:-|. В этом же проекте есть полностью такие же строки, и они работают, а в этом случае нет! Что тут...

Входная строка имела неверный формат
Есть небольшая база данных созданная в mssql. Там есть столбец "FactoryNumber" с типом "nvarchar(50)". Когда начал пытаться...

Входная строка имела неверный формат
Добрый день! Я новичок и пытаюсь сделать по примеру, но выдаёт ошибку "Входная строка имела неверный формат". Что я сделал не так? Вот...

Входная строка имела неверный формат
Подскажите в чем может быть проблема. У меня в коде пишет "Входная строка имела неверный формат." public bool...

Входная строка имела неверный формат. Entity Framework 6
Всем доброго времени суток пытаюсь решить эту проблему уже долгое время не понимаю вчём беда. использую ORM Entity Framework 6 БД MySQL....


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
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
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru