简体   繁体   English

插入表时数据类型不匹配

[英]Data type mismatch when inserting into table

I'm having some issues with inserting data into a Microsoft Access table named Order . 将数据插入名为Order的Microsoft Access表时遇到一些问题。 The method I've listed is created in my data access layer and called through a Button Click event in my presentation layer. 我列出的方法是在数据访问层中创建的,并通过表示层中的Button Click事件调用。 The error I'm getting is: 我得到的错误是:

Data type mismatch in criteria expression. 条件表达式中的数据类型不匹配。

The error is highlighted at the cmd.ExecuteNonQuery() line: 该错误在cmd.ExecuteNonQuery()行中突出显示:

Data access layer method: 数据访问层方法:

public static void processOrder(int employeeId, int tableId, DateTime orderDate, DateTime orderBegin, bool orderStatus)
{
   try
   {
      if (KaiConnection.State == ConnectionState.Closed)
         KaiConnection.Open();

      OleDbCommand cmd = new OleDbCommand(
         "INSERT INTO [Order] (EmployeeID, [TableID], OrderDate, OrderBegin, OrderStatus)" +
         " VALUES (?,?,?,?,?)", KaiConnection);
      //cmd.CommandText = sSQLCommand;
      cmd.Parameters.AddWithValue("?", employeeId);
      cmd.Parameters.AddWithValue("?", tableId);
      cmd.Parameters.AddWithValue("?", orderDate);
      cmd.Parameters.AddWithValue("?", orderBegin);
      cmd.Parameters.AddWithValue("?", orderStatus);

      // Execute the SQL command
      cmd.ExecuteNonQuery();
      KaiConnection.Close();
   }
   catch (Exception ex)
   {
      MessageBox.Show((ex.ToString()));
   }
}

Presentation layer Button Click event: 表示层Button Click事件:

private void btnProcessOrder_Click(object sender, EventArgs e)
{
   Order anOrder = new Order();
   anOrder.EmployeeId = empId;
   anOrder.TableId = int.Parse(txtTableID.Text);
   anOrder.OrderDate = DateTime.Today;
   anOrder.OrderBegin = DateTime.Now;
   anOrder.OrderStatus = true;
   anOrder.processOrder();
}

Here's a modification of your code using the OleDbParameter class: 这是使用OleDbParameter类对代码进行的OleDbParameter

public static void processOrder(int employeeId, int tableId, DateTime orderDate, DateTime orderBegin, bool orderStatus)
{
    try
    {
        if (KaiConnection.State == ConnectionState.Closed)
            KaiConnection.Open();

        OleDbCommand cmd = new OleDbCommand("INSERT INTO [Order] (EmployeeID, [TableID], OrderDate, OrderBegin, OrderStatus)" +
                         " VALUES (@EmployeeID, @TableID, @OrderDate, @OrderBegin, @OrderStatus)", KaiConnection);

        OleDbParameter[] parameters = new OleDbParameter[5];
        parameters[0] = new OleDbParameter("@EmployeeID", OleDbType.Integer);
        parameters[1] = new OleDbParameter("@TableID", OleDbType.Integer);
        parameters[2] = new OleDbParameter("@OrderDate", OleDbType.Date);
        parameters[3] = new OleDbParameter("@OrderBegin", OleDbType.Date);
        parameters[4] = new OleDbParameter("@OrderStatus", OleDbType.Boolean);

        parameters[0].Value = employeeId;
        parameters[1].Value = tableId;
        parameters[2].Value = orderDate;
        parameters[3].Value = orderBegin;
        parameters[4].Value = orderStatus;

        for (int i = 0; i < 5; i++)
        {
            cmd.Parameters.Add(parameters[i]);
        }

        cmd.ExecuteNonQuery();
        cmd.Parameters.Clear();
        KaiConnection.Close();
    }
    catch (Exception ex)
    {
        MessageBox.Show((ex.ToString()));
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM