2014-07-26 35 views
0

我在將數據插入名爲Order的Microsoft Access表中時遇到了一些問題。我列出的方法是在我的數據訪問層中創建的,並通過我的表示層中的Button Click事件調用。我得到的錯誤是:插入表格時數據類型不匹配

標準表達式中的數據類型不匹配。

的錯誤是在cmd.ExecuteNonQuery()行強調:

數據訪問層方法:

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())); 
    } 
} 

表示層按鈕單擊事件:

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(); 
} 

回答

1

這是你的代碼的修改使用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())); 
    } 
}