private void cmdUpdate_Click(object sender, EventArgs e)
        {
            dbHelper = new DatabaseHelper();
            if (DataGood())
            {
                if (typeOfAction.Equals("create"))
                {
                    Task t = new Task(list.ID, txtName.Text, txtDescription.Text, monthCalendar1.SelectionStart, DateTime.MinValue);
                    dbHelper.CreateTask(t);
                    this.DialogResult = System.Windows.Forms.DialogResult.OK;
                }
                else if (typeOfAction.Equals("update"))
                {
                    //task = new Task(txtName.Text, txtDescription.Text, monthCalendar1.SelectionStart);
                    task.Name = txtName.Text;
                    task.Description = txtDescription.Text;
                    task.DueDate = monthCalendar1.SelectionStart;
                    dbHelper.UpdateTask(task);
                }

                this.Close();
            }
            else
            {
                this.DialogResult = System.Windows.Forms.DialogResult.Retry;
            }
        }
 //constructor called when modifying task coming in
 public TaskForm(Task task)
 {
     InitializeComponent();
     this.task = task;
     lblTaskName.Text = "Update Task";
     typeOfAction = "update";
     txtName.Text = task.Name;
     txtDescription.Text = task.Description;
     monthCalendar1.SelectionStart = task.DueDate;
 }
        public void CreateTask(Task task)
        {
            createCommand();

            if (task.ID == -1)
            {
                task.ID = GetTaskCount();
            }

            try
            {
                string sql = "INSERT INTO [Task] ([id], [listID], [name], [description], [due], [completed]) VALUES(@id, @listID, @name, @description, @due, @completed)";
                _cmd.CommandText = sql;
                _cmd.Parameters.Add("@id", System.Data.SqlDbType.Int).Value = task.ID;
                _cmd.Parameters.Add("@listID", System.Data.SqlDbType.Int).Value = task.ListID;
                _cmd.Parameters.Add("@name", System.Data.SqlDbType.VarChar).Value = task.Name;
                _cmd.Parameters.Add("@description", System.Data.SqlDbType.VarChar).Value = task.Description;
                _cmd.Parameters.Add("@due", System.Data.SqlDbType.DateTime).Value = task.DueDate;
                _cmd.Parameters.Add("@completed", System.Data.SqlDbType.DateTime);

                if (task.IsCompleted())
                {
                    _cmd.Parameters["@completed"].Value = task.Completed;
                }
                else
                {
                    _cmd.Parameters["@completed"].Value = DBNull.Value;
                }

                _conn.Open();
                _cmd.ExecuteNonQuery();
                _conn.Close();
            }
            catch (SqlException ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
        public void UpdateTask(Task task)
        {
            createCommand();

            string sql = "UPDATE Task SET [name] = @name, [description] = @description, [due] = @due, [completed] = @completed, [listID] = @listID WHERE [id] = @id";

            _cmd.CommandText = sql;
            _cmd.Parameters.Add("@name", System.Data.SqlDbType.VarChar).Value = task.Name;
            _cmd.Parameters.Add("@description", System.Data.SqlDbType.VarChar).Value = task.Description;
            _cmd.Parameters.Add("@due", System.Data.SqlDbType.DateTime).Value = task.DueDate;
            _cmd.Parameters.Add("@completed", System.Data.SqlDbType.DateTime);
            _cmd.Parameters.Add("@listID", System.Data.SqlDbType.Int).Value = task.ListID;
            _cmd.Parameters.Add("@id", System.Data.SqlDbType.Int).Value = task.ID;

            if (task.IsCompleted())
            {
                _cmd.Parameters["@completed"].Value = task.Completed;
            }
            else
            {
                _cmd.Parameters["@completed"].Value = DBNull.Value;
            }

            _conn.Open();
            _cmd.ExecuteNonQuery();
            _conn.Close();
        }
        public List<Task> GetTasksForList(int ListID)
        {
            createCommand();

            List<Task> tasks = new List<Task>();
            string sql = "SELECT * FROM [Task] INNER JOIN [List] ON [Task].[listID] = [List].[id] WHERE [List].[id] = @listID";
            _cmd.CommandText = sql;
            _cmd.Parameters.Add("@listID", System.Data.SqlDbType.Int).Value = ListID;

            _conn.Open();
            SqlDataReader dr = _cmd.ExecuteReader();
            if (dr.HasRows)
            {
                while(dr.Read())
                {
                    int ID = Convert.ToInt32(dr["id"]);
                    int listID = Convert.ToInt32(dr["listID"]);
                    string name = dr["name"].ToString();
                    string description = dr["description"].ToString();
                    DateTime due = Convert.ToDateTime(dr["due"]);
                    DateTime completed = DateTime.MinValue;
                    //Yes this sucks, but it wants an ordinal :(
                    if (!dr.IsDBNull(5))
                    {
                         completed = Convert.ToDateTime(dr["completed"]);
                    }

                    Task task = new Task(listID, name, description, due, completed);
                    task.ID = ID;
                    tasks.Add(task);
                }
            }
            dr.Close();
            _conn.Close();

            return tasks;
        }
        public void DeleteTask(Task task)
        {
            createCommand();

            string sql = "DELETE FROM [Task] WHERE [id] = @id";
            _cmd.CommandText = sql;
            _cmd.Parameters.Add("@id", System.Data.SqlDbType.Int).Value = task.ID;

            _conn.Open();
            _cmd.ExecuteNonQuery();
            _conn.Close();
        }