Вы используете ExecuteReader, когда должны использовать ExecuteNonQuery.
Не связано с вашей ошибкой, вам действительно не следует использовать String.Format
с SqlCommand.Что вы должны сделать, это
string query = "INSERT INTO Cookies(cookie_value, cookie_expires) VALUES(@cookie, @expires);", cookie, expires);
SqlCommand cmd = new SqlCommand();
cmd.Parameters.AddWithValue("@cookie", cookie);
cmd.Parameters.AddWithValue("@expires", expires);
cmd.CommandText = query;
С помощью вашего метода спросите себя, не передал ли кто-то печенье ' ''); Drop table Cookies --
?Это называется «Sql Injection Attack» и является одной из 5 основных причин взлома сайтов.
РЕДАКТИРОВАТЬ
Просто чтобы привести еще один пример того, почему используется StringФорматировать для передачи значений, которые вы не генерировали, плохо.![http://xkcd.com/327/](https://imgs.xkcd.com/comics/exploits_of_a_mom.png)