У меня есть 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
это потому, что значение в чем-то вроде Time_OperationTextBox.Text - это нить, но ваш метод mySQL ожидает Промежуток времени - вам нужно проанализировать строку в TimeSpan, который вы затем передадите в параметр mySQL.
Я просто запутался, где я могу поместить код для его преобразования!
Просто оберните ссылку на текстовое поле в вызов TimeSpan.Parse






Я понял это так:
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 спасибо за предложение ... вы правы! Я хочу, чтобы пользователь ввел в текстовое поле время, например: 08:10:00, в том же формате в таблице базы данных. но я не мог понять, как это сделать с помощью TimeSpan.parse
Как я уже сказал, что именно пошло не так, когда вы попробовали? Какой именно код вы написали?
Собственно у меня было время добавить полный ответ, для наглядности
@ADyson, пожалуйста, если у вас есть время, дайте ответ, потому что я новичок :) Не знаю, как и куда поставить код !. простите за это
Я уже это сделал, см. Мой последний комментарий. Ответ должен быть вам уже виден. P.S. Это просто простой вызов метода - вы вводите строку и получаете TimeSpan. :-)
Сообщение об ошибке сообщает, что вы указываете значение параметра типа 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 ячейки пусты!
Вы передаете строки в параметры, но говорите, что у них есть другие типы. Вы пробовали преобразоваться в типы, которые, по вашему мнению, вы проходите?