Try changing the way you are setting up your command to use prepared sql
see
http://msdn.microsoft.com/en-GB/library/system.data.oledb.oledbcommand.prepare.aspx[
^]
Apart from making things more performant using (fully) parameterised queries will also help protect against sql injection
[Edit]
cmd.CommandText = @"insert into fstathote values (?,?,?,?,?)
foreach (DataRow row in fstathotel.Rows)
cmd.Parameters.AddWithValue("mpehotel", Convert.ToInt32(row["mpehotel"]));
cmd.Paremeters.AddWithValue("date", Convert.ToDateTime(row["date"]));
cmd.Parameters.AddWithValue("type", row["type"].ToString());
cmd.Parameters.AddWithValue("value", Decimal.Parse(row["value"].ToString())); // parmSlot1 in your code
cmd.Parameters.AddWithValue("edate", Convert.ToDateTime(row["edate"]));
cmd.ExecuteNonQuery();