Therapyx
@Therapyx
Data Science

Как решить проблему конверта DateTime при селекте из Gridview?

Такая проблемка. Есть GridView, кнопка и текстовое поле. Задача: вывести все записи в GridView из базы по заданной дате в тестовом поле.
Код по нажатию кнопки:
            DateTime datetime = Convert.ToDateTime(TextBox1.Text);
            SqlCommand cmd = new SqlCommand("Select * from Purchase where P_Date = '" + datetime + "'", cn);
            SqlDataAdapter sda = new SqlDataAdapter(cmd);
            DataTable dt = new DataTable();
            sda.Fill(dt);
            gvPurchase.DataSourceID = null;
            gvPurchase.DataSource = dt;
            gvPurchase.DataBind();

для теста еще создал лейбл, если ввожу в TextBox1 дату, то лейбл показывает "17.07.2015 00:00:00"

А вот если же пытаюсь делать селект из базы с SqlCommand, то получаю следующую ошибку:
Conversion failed when converting date and/or time from character string.
возникает на: Line 100: sda.Fill(dt);

Очень не люблю эти танцы с бубном из-за DateTim'ов. Как решить эту проблему в моем случае? И если у кого-нибудь есть хорошая статья по поводу таких проблем, тоже буду рад ссылочке )

---(Ответы в комментах)---
  • Вопрос задан
  • 1916 просмотров
Решения вопроса 2
@dmitryKovalskiy
программист средней руки
Устал уже если честно видеть подобный код. Ваши танцы с бубнами связаны с тем что вы не имеете представления о грамотной работе с базой данных. Конкатенация SQL-запроса в обработчике события в code-behind - это решение человека, работающего с технологией минут 20. Решений - гора. 1) Использование ORM(использование Entity Framework с подходом DB First избавляет от приведения типов и возможности сделать инъекцию) 2) Использование хранимых процедур. 3) использование параметризованных запросов. Парадокс в том что если вы в запросе используете, например, хранимую процедуру, то вы можете использовать код вида cmd.Parameters.AddIDateTime(sName, val) - и приводить типы не надо.
Ответ написан
@Noxy
увлекаюсь SQL
При необходимости использовать такой подход, приводи дату к формату ISO = 'yyyy-mm-ddThh:mm:ss'.
в скулевом конверте - 121.

попробуй так:
Convert.ToDateTime(TextBox1.Text).ToString("yyyy-MM-dd hh:mm:ss"), или Convert.ToDateTime(TextBox1.Text).ToString("yyyy-MM-dd") - если нужен только день.

upd. не заметил, что ответили выше. сори.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы