{“只有TimeSpan对象才能由MySqlTimeSpan序列化”}使用VB.NET

时间:2018-11-27 13:54:21

标签: mysql vb.net parameters ado.net timespan

我有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

这意味着日期时间运行良好,但是我将它们作为

的那三个参数存在问题
 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

2 个答案:

答案 0 :(得分:0)

错误消息告诉您,您提供给参数值的类型为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

答案 1 :(得分:-1)

我是这样想的:

@Override
public void setValueAt(Object value, int row, int column)
{
    super.setValueAt(value, row, column);

    if (column == 0 || or column == 3)
    {
        double column0 = getValueAt(row, 0);
        double column3 = getValueAt(row, 3);
        double result = column0 * column3;
        setValueAt(result, row, 6);
    }
}

不幸的是,我无法用 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) 解决它:-)