Неверное приведение от 'Boolean' к 'Datetime' - вставьте столбец datetime в базу данных - PullRequest
0 голосов
/ 12 июня 2019

В течение 2 дней я хотел бы написать код, который импортирует данные из MS Excel (Office 365) в datagridview, а затем в базу данных mysql. В этом случае у меня есть таблица в MS Excel лист:

enter image description here

Что я наделал?

Я уже написал код, который загружает данные из таблицы MS Excel в таблицу данных и отображает их.

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

 for (int i = 0; i < datagrdStatus_order.Rows.Count; i++)
                    {
                        MySqlCommand cmd = new MySqlCommand("INSERT IGNORE INTO try1.order_status(ID_WORKER, ID_ORDER, ID_MODULE, ID_PROJECT, AMOUNT_OF_PRODUCTS, BEGIN_DATE, END_DATE) SELECT workers.ID_WORKER, orders.ID_ORDER, module.ID_MODULE, projects.ID, @AMOUNT_OF_PRODUCTS, @BEGIN_DATE, @END_DATE FROM try1.workers INNER JOIN try1.orders INNER JOIN try1.modules INNER JOIN try1.projects WHERE workers.FNAME = @FNAME AND workers.LNAME = @LNAME AND workers.ID_WORKER = @ID_WORKER AND orders.ORDER_DESC = @ORDER_DESC AND orders.ORDER_NUMBER = @ORDER_NUMBER AND modules.NAME = @MODULES_NAME AND projects.PROJECT_NAME = @PROJECT_NAME", connection);

                        DateTime begin_date;

                        bool value = DateTime.TryParse(datagrdStatus_order.Rows[i].Cells[8].Value.ToString(), out begin_date);

                        if (!value)
                        {
                            begin_date = Convert.ToDateTime(value);
                        }

                        DateTime end_date;

                        bool value2 = DateTime.TryParse(datagrdStatus_order.Rows[i].Cells[9].Value.ToString(), out end_date);

                        if (!value2)
                        {
                           end_date = Convert.ToDateTime(value2);
                        }

                        cmd.Parameters.AddWithValue("@ID_WORKER", datagrdStatus_order.Rows[i].Cells[0].Value);
                        cmd.Parameters.AddWithValue("@FNAME", datagrdStatus_order.Rows[i].Cells[1].Value);
                        cmd.Parameters.AddWithValue("@LNAME", datagrdStatus_order.Rows[i].Cells[2].Value);
                        cmd.Parameters.AddWithValue("@ORDER_DESC", datagrdStatus_order.Rows[i].Cells[3].Value);
                        cmd.Parameters.AddWithValue("@NUMBER_ORDER", datagrdStatus_order.Rows[i].Cells[4].Value);
                        cmd.Parameters.AddWithValue("@MODULES_NAME", datagrdStatus_order.Rows[i].Cells[5].Value);
                        cmd.Parameters.AddWithValue("@PROJECT_NAME", datagrdStatus_order.Rows[i].Cells[6].Value);
                        cmd.Parameters.AddWithValue("@AMOUNT_OF_PRODUCTS", datagrdStatus_order.Rows[i].Cells[7].Value);
                        cmd.Parameters.AddWithValue("@BEGIN_DATE", begin_date);
                        cmd.Parameters.AddWithValue("@END_DATE", end_date);
                        cmd.ExecuteNonQuery();
                    }

Затем я скомпилировал этот код, у меня есть исключение:

Неверное приведение от 'Boolean' к 'Datetime'

и указывает на строку кода:

 begin_date = Convert.ToDateTime(value);

Я искал другие решения, но я до сих пор не знаю, как их решить. Есть идеи? Спасибо за любую помощь.

Ответы [ 3 ]

0 голосов
/ 12 июня 2019

Что вы пытаетесь сделать, это проверить, правильное ли значение DateTime?

Решение простое. вы должны использовать DateTime? вместо bool для вашей переменной value. Это представляет Nullable DateTime

0 голосов
/ 12 июня 2019

DateTime.TryParse просто возвращает bool, если анализ был успешным.Параметр «out» - это возвращаемое значение, что должно быть интересно.

Оба эти случая кажутся мне ненужными.Когда DateTime.TryParse возвращает false, вы не можете разобрать строку в datetime.Вы должны посмотреть, что datagrdStatus_order.Rows [i] .Cells [8] .Value.ToString () дает вам, и если это можно проанализировать в DateTime.

Может быть, документация должно быть более понятным

0 голосов
/ 12 июня 2019

У вас есть value как тип bool

 bool value = DateTime.TryParse(datagrdStatus_order.Rows[i].Cells[8].Value.ToString(), out begin_date);

Тогда вы называете это: Convert.ToDateTime(value); Так что это исключение, потому что Convert.ToDateTime() принимает тип данных DateTime, а не тип bool.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...