 <p>I think you need specify the SqlDBType when assigning the values to date in command.Parameters .and please cross check the parameter names which you have specified in insert statement with the parameters specified in parameters.Add </p> <pre><code>string sql = "INSERT INTO spending VALUES (@date, @amount_spent, @spent_on)"; using (var cn = new SqlConnection("..connection string..")) using (var cmd = new SqlCommand(sql, cn)) { cmd.Parameters.Add("@date", SqlDbType.DateTime).Value = date_dateTimePicker.Value; command.Parameters.AddWithValue("@amount_spent",Convert.ToDecimal(amount_spent_textBox.Text)); command.Parameters.AddWithValue("@spent_on", spent_on_textBox.Text); connect.Open(); </code></pre> <p>Some time its better to use invariant culture to store things like date/time in database .You can try that CultureInfo.Invariantculture</p> <pre><code>DateTime date = date_dateTimePicker.Value.Date; string sDate = date.ToString("dd-MM-yy", System.Globalization.CultureInfo.InvariantCulture); DateTime dateInsert = Convert.ToDateTime(sDate); </code></pre>