Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.93/15: Рейтинг темы: голосов - 15, средняя оценка - 4.93
0 / 0 / 0
Регистрация: 09.03.2017
Сообщений: 35

Необработанное исключение типа "System.FormatException" в mscorlib.dll

24.04.2019, 19:09. Показов 3646. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте)
Столкнулась со следующей проблемой:
При конвертировании из string в double возникает ошибка:Необработанное исключение типа "System.FormatException" в mscorlib.dll. Но я не понимаю из-за чего? Вроде всё логично: находится среднее значение (оно может быть целым и дробным), конвертируется в double и записывается в поле таблицы Фильмы, формат которого не дата/время, как утверждается в ошибке.
2 части с sql запросами(select и update) отдельно работают , то есть проблема точно не в них, а в строке double f = Convert.ToDouble(m);
Помогите,пожалуйста, найти ошибку)
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
string n;
 private void dataGridView1_CellClick_1(object sender, DataGridViewCellEventArgs e)
        {
            n = dataGridView1.CurrentRow.Cells[3].Value.ToString();
            
        }
private void button9_Click(object sender, EventArgs e)
        {                        
 
           string m = "SELECT AVG  ([Сумма, руб]) FROM Заказы WHERE  Код = "+n;           
             OleDbCommand command1 = new OleDbCommand(m, myConnection);
            myConnection.Open();
            command1.ExecuteNonQuery();          
            myConnection.Close();
 
          double f = Convert.ToDouble(m);
 
            string me = " UPDATE Фильмы SET [Оценка фильма] = "+f+" WHERE Код ="+n;
              OleDbCommand command = new OleDbCommand(me, myConnection);
             myConnection.Open();
              command.ExecuteNonQuery();            
            myConnection.Close();
            
        }
Миниатюры
Необработанное исключение типа "System.FormatException" в mscorlib.dll  
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
24.04.2019, 19:09
Ответы с готовыми решениями:

Необработанное исключение типа "System.FormatException" в mscorlib.dll
using System; using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Data; using...

Входная строка имела неверный формат. Исключение типа "System.FormatException" в mscorlib.dll
Здравствуйте! Подскажите пожалуйста. При выполнении действий над значениями в datagridview при нажатии кнопки появляется ошибка: ...

Необработанное исключение типа "System.BadImageFormatException" в mscorlib.dll
Здравствуйте, сегодня сел писать прогу, продолжать точнее, все было нормально пока не добавил еще два элемента в ресурсы, по сути никак не...

22
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,575
24.04.2019, 19:18
Ну так чему равно m в момент возникновения ошибки? Наверняка там какой-то мусор, который не может быть конвертирован в double...
0
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
24.04.2019, 19:22
кит18,

Издеваетесь?
Как из строки
C#
1
string m = "SELECT AVG  ([Сумма, руб]) FROM Заказы WHERE  Код = "+n;
вы предполагаете получить double?
1
0 / 0 / 0
Регистрация: 09.03.2017
Сообщений: 35
24.04.2019, 19:51  [ТС]
Цитата Сообщение от Даценд Посмотреть сообщение
Как из строки
C#Выделить код
1
string m = "SELECT AVG *([Сумма, руб]) FROM Заказы WHERE *Код = "+n;
вы предполагаете получить double?
Но если сразу писать так:
C#
1
double m = "SELECT AVG  ([Сумма, руб]) FROM Заказы WHERE  Код = "+n;
то выходит ошибка : Не удается неявно преобразовать тип string в double

Добавлено через 1 минуту
Цитата Сообщение от Someone007 Посмотреть сообщение
Ну так чему равно m в момент возникновения ошибки? Наверняка там какой-то мусор, который не может быть конвертирован в double...
По сути m это вычисляемое число - среднее арифметическое значение, например 245,663
0
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,575
24.04.2019, 19:52
Цитата Сообщение от кит18 Посмотреть сообщение
По сути m это вычисляемое число - среднее арифметическое значение, например 245,663
Нужно не по сути, а что там конкретно за значение в момент возникновения исключения, вам что сложно посмотреть чтоли? Так же при конвертации имеет значение какой символ используется как десятичный разделитель...
0
0 / 0 / 0
Регистрация: 09.03.2017
Сообщений: 35
24.04.2019, 19:53  [ТС]
245,663
0
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
24.04.2019, 20:00
Цитата Сообщение от Someone007 Посмотреть сообщение
что там конкретно за значение в момент возникновения исключения
Вы не видите, что он строку "SELECT AVG ([Сумма, руб]) FROM Заказы WHERE Код = " в double конвертирует?
0
1341 / 920 / 265
Регистрация: 08.08.2014
Сообщений: 2,768
24.04.2019, 20:00
кит18
Ваш код, что приведён в первом посте, не получает результат выполнения запроса с сервера.

Используйте command1.ExecuteScalar();.
Получите результат в переменную типа object.
Посмотрите, какого именно она типа (вероятно, будет double).
И потом просто сделайте приведение к нужному типу, например, так: double f = (double)command1.ExecuteScalar();
1
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
24.04.2019, 20:01
кит18,
Вы думаете, что при выполнении
C#
1
command.ExecuteNonQuery();
в m запишется результат запроса?
Так нет.
О, kotelok правильно сказал, как нужно делать.
0
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,575
24.04.2019, 20:07
Цитата Сообщение от Даценд Посмотреть сообщение
Вы не видите, что он строку
Вижу, но он утверждает что там 245,663... Я пытался добиться какого нибудь скриншота от него, но не получилось...
0
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
24.04.2019, 20:15
Someone007,
я все испортил )
0
0 / 0 / 0
Регистрация: 09.03.2017
Сообщений: 35
24.04.2019, 20:18  [ТС]
Цитата Сообщение от kotelok Посмотреть сообщение
Ваш код, что приведён в первом посте, не получает результат выполнения запроса с сервера.
Используйте command1.ExecuteScalar();.
Получите результат в переменную типа object.
Посмотрите, какого именно она типа (вероятно, будет double).
И потом просто сделайте приведение к нужному типу, например, так: double f = (double)command1.ExecuteScalar();
Я не до конца поняла, что делать...( Но если писать так, то ругается на вторую строку на m, что его невозможно преобразовать из object в string:
C#
1
2
3
4
5
6
 object m = "SELECT AVG  ([Сумма, руб]) FROM Заказы WHERE  Код = "+n;           
             OleDbCommand command1 = new OleDbCommand(m, myConnection);
            myConnection.Open();
            command1.ExecuteScalar();
            double f = (double)command1.ExecuteScalar();
            myConnection.Close();
Только сильно не ругайтесь, я правда в этом плохо разбираюсь(
0
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
24.04.2019, 20:25
Проще самому сделать, чем объяснить.
C#
1
2
3
4
5
string m = "SELECT AVG  ([Сумма, руб]) FROM Заказы WHERE  Код = "+n;           
OleDbCommand command1 = new OleDbCommand(m, myConnection);
myConnection.Open();
double f = Convert.ToDouble(command1.ExecuteScalar());
myConnection.Close();
1
1341 / 920 / 265
Регистрация: 08.08.2014
Сообщений: 2,768
24.04.2019, 20:29
кит18
C#
1
2
3
4
5
6
7
8
OleDbCommand command1 = new OleDbCommand("SELECT AVG  ([Сумма, руб]) FROM Заказы WHERE  Код = "+n, myConnection);
myConnection.Open();
 
//Получение результат выполнения запроса на сервере.
object result = command1.ExecuteScalar();
 
//Попытка привести результат к нужному типу.
double f = (double)result;
Вот в строке приведения результата к нужному типу важно указать именно тот тип, который реально упакован в 'result'.
Я не знаю, какого именно типа у вас поле "сумма" в базе, потому точный тип сказать не могу.
Но вы можете сами его посмотреть.
Поставьте точку останова после получения результата с сервера.
И в отладке посмотрите значение какого типа внутри 'result'.
Вот его и впишите в скобочки в следующей строке.
1
0 / 0 / 0
Регистрация: 09.03.2017
Сообщений: 35
24.04.2019, 20:51  [ТС]
Цитата Сообщение от kotelok Посмотреть сообщение
Вот в строке приведения результата к нужному типу важно указать именно тот тип, который реально упакован в 'result'.
Я не знаю, какого именно типа у вас поле "сумма" в базе, потому точный тип сказать не могу.
Но вы можете сами его посмотреть.
Поставьте точку останова после получения результата с сервера.
И в отладке посмотрите значение какого типа внутри 'result'.
Вот его и впришите в скобочки в следующей строке.
Сделала, как вы сказали. Внутри result 267,6667. Получается double, то есть в следующей строке ничего не надо менять. Продолжаю отладку и выдает ошибку:
Миниатюры
Необработанное исключение типа "System.FormatException" в mscorlib.dll  
0
1341 / 920 / 265
Регистрация: 08.08.2014
Сообщений: 2,768
24.04.2019, 20:54
кит18
Так посмотрите, что внутри 'result', там не обязательно 'double', может быть 'float' или 'decimal'. Или преобразуйте так, как выше Даценд предложил.
1
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
24.04.2019, 20:55
кит18,
Вы вообще читаете, что вам пишут или нет?
Цитата Сообщение от Даценд Посмотреть сообщение
double f = Convert.ToDouble(command1.ExecuteScalar( ));
0
1341 / 920 / 265
Регистрация: 08.08.2014
Сообщений: 2,768
24.04.2019, 20:56
Вон у вас там внизу окошке переменных есть 'result', в третьей колнке (правее значения) указан реальный тип. Вот его нужно в скобки перез 'result'.
1
0 / 0 / 0
Регистрация: 09.03.2017
Сообщений: 35
24.04.2019, 21:14  [ТС]
Цитата Сообщение от kotelok Посмотреть сообщение
Вон у вас там внизу окошке переменных есть 'result', в третьей колнке (правее значения) указан реальный тип. Вот его нужно в скобки перез 'result'.
Да, нашла, оказывается decimal..Но когда пишу так:
C#
1
double f = (decimal)result;
то пишет что: Не удается неявно преобразовать тип "decimal" в "double". Существует явное преобразование (возможно, пропущено приведение типов).
0
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,575
24.04.2019, 21:23
Лучший ответ Сообщение было отмечено кит18 как решение

Решение

А если так?
C#
1
double f = (double)(decimal)result;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.04.2019, 21:23
Помогаю со студенческими работами здесь

Необработанное исключение типа "System.Reflection.TargetInvocationException" в mscorlib.dll
Добрый день! Помогите разобраться возникает ошибка Необработанное исключение типа...

Необработанное исключение типа "System.IO.FileNotFoundException" в mscorlib.dll . Почему не работает?
Дополнительные сведения: Файл 'F:\Test.txt' не найден. public partial class FirstProgramm : Form { //KeyLogger private...

Необработанное исключение типа "System.ArgumentException" в System.Windows.Forms.dll
Всем привет, пытаюсь сделать переход на форму по кнопке но вылазит следующее: С другими кнопками всё хорошо.

Необработанное исключение типа "System.StackOverflowException" в System.Windows.Forms.dll
Есть класс Controls и класс формы. При нажатии на кнопку, создается другая кнопка. В классе Controls описано само создание и действие при...

Необработанное исключение типа "System.StackOverflowException" в System.Windows.Forms.dll
Доброго времени суток. Столкнулся со следующей проблемой: При запуске вылезает "Необработанное исключение типа...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Команды "Заполнить" и "Очистить" на форме документа
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". На примере нетипового документа разработанного в конфигурации КА2. В качестве источника данных указан регистр накопления, в который записываются данные о. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru