You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VB.NET向Access插入数据时出现数据类型不匹配错误求助

解决VB.NET DateTimePicker插入Access数据类型不匹配问题

排查与修复步骤

1. 检查字段名拼写

你的SQL语句中使用了Delevery_date,务必确认Access表中对应的字段名是否为正确拼写的Delivery_date——字段名拼写错误会导致数据库无法匹配对应字段,进而触发类型不匹配错误,这是高频踩坑点。

2. 显式指定参数的数据类型

OleDb参数化查询中,显式声明DbType可避免自动类型转换的歧义,尤其是日期类型:

' 修正后的参数定义,显式指定DbType
Dim parameters As OleDbParameter() = {
    New OleDbParameter("?", OleDbType.Integer) With {
        .Value = If(String.IsNullOrEmpty(TextBox1.Text), DBNull.Value, Integer.Parse(TextBox1.Text))
    },
    New OleDbParameter("?", OleDbType.Date) With {
        .Value = DateTimePicker2.Value.Date ' 仅传入日期部分,适配Access短日期字段
    },
    New OleDbParameter("?", OleDbType.VarChar) With {.Value = TextBox2.Text},
    New OleDbParameter("?", OleDbType.VarChar) With {.Value = TextBox3.Text},
    New OleDbParameter("?", OleDbType.Date) With {
        .Value = DateTimePicker1.Value.Date
    },
    New OleDbParameter("?", OleDbType.Integer) With {
        .Value = If(String.IsNullOrEmpty(TextBox4.Text), DBNull.Value, Integer.Parse(TextBox4.Text))
    }
}

3. 验证DateTimePicker的日期有效性

虽然DateTimePicker默认不会返回无效日期,但可添加防御性检查避免异常:

' 示例:检查日期是否有效
If Not DateTime.TryParse(DateTimePicker1.Value.ToString(), Nothing) Then
    MessageBox.Show("请选择有效的交付日期")
    Return
End If

4. 确认Access表字段类型

  • SO_date和Delivery_date需设置为日期/时间类型,不要选择“短文本”或其他类型;
  • So_no和order_value确认是**数字(整型)**类型:VB.NET的Integer对应Access的“长整型”,若字段是“短整型”,则需改用Short.Parse。

完整修正后的Button_Click代码

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    GroupBox1.Visible = True
    DataGridView1.Visible = True

    Try
        ' 修正字段名拼写为Delivery_date(根据实际表结构调整)
        Dim query As String = "INSERT INTO sales_order_header (So_no, SO_date, Customer, Project_name, Delivery_date, order_value) " & _
                              "VALUES (?, ?, ?, ?, ?, ?)"

        ' 显式指定参数类型的参数数组
        Dim parameters As OleDbParameter() = {
            New OleDbParameter("?", OleDbType.Integer) With {
                .Value = If(String.IsNullOrEmpty(TextBox1.Text), DBNull.Value, Integer.Parse(TextBox1.Text))
            },
            New OleDbParameter("?", OleDbType.Date) With {
                .Value = DateTimePicker2.Value.Date
            },
            New OleDbParameter("?", OleDbType.VarChar) With {.Value = TextBox2.Text},
            New OleDbParameter("?", OleDbType.VarChar) With {.Value = TextBox3.Text},
            New OleDbParameter("?", OleDbType.Date) With {
                .Value = DateTimePicker1.Value.Date
            },
            New OleDbParameter("?", OleDbType.Integer) With {
                .Value = If(String.IsNullOrEmpty(TextBox4.Text), DBNull.Value, Integer.Parse(TextBox4.Text))
            }
        }

        Database.ExecuteQueryWithParameters(query, parameters)

        MessageBox.Show("Order Created, add Items")
        TextBox1.ReadOnly = True
        TextBox2.ReadOnly = True
        TextBox3.ReadOnly = True
        TextBox4.ReadOnly = True
    Catch ex As Exception
        MessageBox.Show("An error occurred: " & ex.Message)
        ResetForm()
    End Try
End Sub

内容的提问来源于stack exchange,提问作者Tanay Mithari

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 02:23:14