2012-04-12 3 views
0

Я делаю программу на C#, где я могу выбрать и поместить данные в dataGridView по годам и месяцам. Годовая часть проста. Я выбираю год из выпадающего списка я сделать этот запрос:Как выбрать месяц для типа данных «дата»?

"SELECT * FROM table WHERE YEAR(date) = '" + year_comboBox.Text + "'"; 

Поскольку формат года в базе данных 2010, 2011, 2012 и так далее, все это прекрасно работает. Но когда дело доходит до нескольких месяцев, они находятся в моем comboBox как январь, февраль, март и т. Д., А их формат в базе данных - 01, 02, 03 и т. Д. Поэтому мне нужен другой тип запроса, или мне понадобится чтобы написать больше кода, чтобы я мог конвертировать строки января, февраля и другого месяца в 01, 02 и т. д., и это не очень эффективно для кода.

Итак, есть ли простой запрос, который я могу сделать, чтобы сделать эту работу без ввода необходимости конвертировать мои месячные строки?

+0

Остерегайтесь sql-injection. Http://xkcd.com/327/ – albertjan

+0

Вы должны использовать параметризованные запросы для предотвращения внедрения SQL. Вот пример того, как это сделать на C#: http://www.dotnetperls.com/sqlparameter В качестве примера того, почему у вас есть проблема, я мог бы набрать ''; drop table table; -' in год коробки и наносит ущерб. –

ответ

2

Вы можете преобразовать имя месяца в виде строки в DateTime, используя DateTime.ParseExact метод:

var monthString = DateTime.ParseExact("April", "MMMM", System.Globalization.CultureInfo.InvariantCulture).Month.ToString("00"); 

Код выше будет назначать „04“ в monthString

+0

Спасибо. Это один адский фрагмент кода. – Alternatex

2

Я бы подумал, что вы можете изменить свое поле со списком, чтобы в дополнение к тексту января, февраля, марта и т. Д. Каждая запись также имела значение из 1, 2, 3 и т. Д. Затем вы можете пройти значение SQL для использования в запросе месяца.

(я могу ошибаться и запутанной выпадающий с раскрывающимся списком. Но в вашем году испытании, вы заметили, что вы используете year_comboBox.Text. Если есть аналогичное Value поля, использовать, чтобы установить значение месяца.)

0
string query = @"SELECT * FROM table WHERE MONTH(date) = '" + DATEPART(mm,CAST(month_combobox+ ' 1900' AS DATETIME)) + "'"; 

С помощью DatePart вы можете получить название месяца из числа. (Не уверен, что о "или")

Смежные вопросы