Rule one: Don't do that!
Rule two: see rule one.
Replace your query with a parameterized query. It will prevent an SQL injection attack, make your code neater, and almost certainly get rid of your problem to boot.
SqlCommand cmd = new SqlCommand("INSERT INTO Expense (ID, Date, Amount, Description) VALUES (@ID, @DT, @AM, @DS)");
cmd.AddWithValue("@ID", tb_ID.Text);
cmd.AddWithValue("@DT", dtp_Edate.Text);
cmd.AddWithValue("@AM", dtp_Edate.Value.ToString);
cmd.AddWithValue("@DS", tb_Description.Text);