{"MySqlTimeSpan может сериализовать только объекты TimeSpan"} с помощью VB.NET

У меня есть form2 для добавления новых данных в мою таблицу, тогда я получил эту ошибку:

 {"Only TimeSpan objects can be serialized by MySqlTimeSpan"}

когда я удалил эту часть кода, он работает:

 cm.Parameters.Add(New MySqlParameter("@Time_Operation",  MySqlDbType.Time)).Value = Time_OperationTextBox.Text
    cm.Parameters.Add(New MySqlParameter("@Start_Time", MySqlDbType.Time)).Value = Start_TimeTextBox.Text
    cm.Parameters.Add(New MySqlParameter("@End_Time", MySqlDbType.Time)).Value = End_TimeTextBox.Text

это означает, что datetime работает хорошо, но проблема с этими тремя параметрами, которые я сделал их

 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

    Dim str As String = "Server=localhost;Port=3306;Database=springdb;Uid=root;Pwd=2342"


    Using con As New MySqlConnection(str)

        Dim query As String = "Insert Into springdata (full_name,rfid_tag,spring_size,operation_time,Date_Operation,
                                    Time_Operation,Start_Time,End_Time,Qty_Needed) values
                                    (@full_name, @rfid_tag, @spring_size, @operation_time,
                                    @Date_Operation, @Time_Operation, @Start_Time, @End_Time, @Qty_Needed) 
                                      " 'Note:TextBox3 is the RFID number come from RFID arduino

        Dim cm As New MySqlCommand(query, con)
        cm.Parameters.Add(New MySqlParameter("@full_name", MySqlDbType.LongText)).Value = TextBox1.Text
        cm.Parameters.Add(New MySqlParameter("@rfid_tag", MySqlDbType.LongText)).Value = TextBox2.Text
        cm.Parameters.Add(New MySqlParameter("@spring_size", MySqlDbType.MediumText)).Value = TextBox3.Text
        cm.Parameters.Add(New MySqlParameter("@operation_time", MySqlDbType.DateTime)).Value = DateTimePicker1.Value
        cm.Parameters.Add(New MySqlParameter("@Date_Operation", MySqlDbType.Date)).Value = DateTimePicker2.Value
        cm.Parameters.Add(New MySqlParameter("@Time_Operation", MySqlDbType.Time)).Value = Time_OperationTextBox.Text
        cm.Parameters.Add(New MySqlParameter("@Start_Time", MySqlDbType.Time)).Value = Start_TimeTextBox.Text
        cm.Parameters.Add(New MySqlParameter("@End_Time", MySqlDbType.Time)).Value = End_TimeTextBox.Text
        cm.Parameters.Add(New MySqlParameter("@Qty_Needed", MySqlDbType.Int32)).Value = TextBox7.Text


        con.Open()

        cm.ExecuteNonQuery()

        MessageBox.Show("success")
    End Using

End Sub

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

Richard 27.11.2018 14:58

это потому, что значение в чем-то вроде Time_OperationTextBox.Text - это нить, но ваш метод mySQL ожидает Промежуток времени - вам нужно проанализировать строку в TimeSpan, который вы затем передадите в параметр mySQL.

ADyson 27.11.2018 15:08

Я просто запутался, где я могу поместить код для его преобразования!

Mohammad Khaled 27.11.2018 16:52

Просто оберните ссылку на текстовое поле в вызов TimeSpan.Parse

ADyson 27.11.2018 18:48
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
1
4
550
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Я понял это так:

        Dim cm As New MySqlCommand(("Insert Into springdata (full_name,rfid_tag,spring_size,operation_time,Date_Operation,
                                    Time_Operation,Start_Time,End_Time,Qty_Needed )  Values ('" & TextBox1.Text & "', '" & TextBox2.Text & "',
                                    '" & ComboBox1.Text & "', '" & DateTimePicker1.Value.ToString("yyyy-MM-dd HH:mm:ss") & "',
                                     '" & DateTimePicker2.Value.ToString("yyyy-MM-dd") & "', '" & Time_OperationTextBox.Text & "', 
                                      '" & Start_TimeTextBox.Text & "', '" & End_TimeTextBox.Text & "', 
                                      '" & TextBox7.Text & "')"), con)

К сожалению, я не смог решить это с помощью timespan,parse :-)

открытие себя атакам с использованием SQL-инъекций (и потенциально глупым синтаксическим ошибкам) ​​- не способ решить проблему. Что пошло не так, когда вы попробовали TimeSpan.parse? В каком формате вы разрешаете людям вводить время в текстовое поле? docs.microsoft.com/en-us/dotnet/api/… сообщает вам, какие форматы приемлемы

ADyson 27.11.2018 23:23

@ADyson спасибо за предложение ... вы правы! Я хочу, чтобы пользователь ввел в текстовое поле время, например: 08:10:00, в том же формате в таблице базы данных. но я не мог понять, как это сделать с помощью TimeSpan.parse

Mohammad Khaled 28.11.2018 07:39

Как я уже сказал, что именно пошло не так, когда вы попробовали? Какой именно код вы написали?

ADyson 28.11.2018 08:18

Собственно у меня было время добавить полный ответ, для наглядности

ADyson 28.11.2018 10:04

@ADyson, пожалуйста, если у вас есть время, дайте ответ, потому что я новичок :) Не знаю, как и куда поставить код !. простите за это

Mohammad Khaled 28.11.2018 10:18

Я уже это сделал, см. Мой последний комментарий. Ответ должен быть вам уже виден. P.S. Это просто простой вызов метода - вы вводите строку и получаете TimeSpan. :-)

ADyson 28.11.2018 10:22
Ответ принят как подходящий

Сообщение об ошибке сообщает, что вы указываете значение параметра типа string, но ваш метод mySQL ожидает TimeSpan - вам нужно разбирать строку, введенную в текстовое поле как TimeSpan, а затем передать полученный TimeSpan в параметр mySQL вместо строки.

Метод TimeSpan.Parse() принимает строку в качестве входных данных, а затем выводит объект TimeSpan, используя значения, которые он считывает из строки.

cm.Parameters.Add(New MySqlParameter("@Time_Operation",  MySqlDbType.Time)).Value = TimeSpan.Parse(Time_OperationTextBox.Text)
cm.Parameters.Add(New MySqlParameter("@Start_Time", MySqlDbType.Time)).Value = TimeSpan.Parse(Start_TimeTextBox.Text)
cm.Parameters.Add(New MySqlParameter("@End_Time", MySqlDbType.Time)).Value = TimeSpan.Parse(End_TimeTextBox.Text)

Конечно, перед этим вы должны убедиться, что то, что ваши пользователи вводят в текстовые поля, имеет допустимый формат, понятный для кода TimeSpan (см. Ссылку на документацию ниже для информации о принятых форматах).

Документация: https://docs.microsoft.com/en-us/dotnet/api/system.timespan.parse?view=netframework-4.7.2

Спасибо :) Теперь ошибок с TimeSpan нет, но значение в трех текстовых полях не добавлено в таблицу базы данных! 3 ячейки пусты!

Mohammad Khaled 28.11.2018 10:41

Другие вопросы по теме