Не видя ваших входов, я предлагаю вам использовать parameterized SQL в вашем C# или создать хранимую процедуру для принятия параметров DATETIME
. Вы не должны использовать жестко запрограммированные SQL-запросы - короче: они подвержены атаке и не optmized в SQL.
Действительно простой способ сделать это - использовать Dapper.NET object mapper.
В SQL, вы могли бы сделать:
CREATE PROCEDURE return_led_for_dates
@startdate DATETIME,
@enddate DATETIME
AS
BEGIN
SELECT
[LedId],
[LedName]
FROM
[Ledger]
WHERE
Date BETWEEN @Startdate AND @Enddate
END
И с Dapper, ваш C# может затем быть:
DateTime startdate = Convert.ToDateTime(metroLabel8.Text);
DateTime enddate = Convert.ToDateTime(metroLabel9.Text);
var LED = this.Connection.Query<LED>(
"return_led_for_dates",
new {
StartDate = startdate,
EndDate = enddate
},
commandType: CommandType.StoredProcedure);
Вам потребуется класс LED тоже:
public class LED
{
int LedId {get; set;},
string LedName {get; set;}
}
Наконец, это предполагает, что нет никаких проблем с преобразованиями текстового поля, вы должны использовать DateTime.TryParse
. Затем вы можете подтвердить свой код и убедиться, что поле правильно проанализировано. Нравится:
DateTime startDate;
DateTime endDate;
if (DateTime.TryParse(Convert.ToDateTime(metroLabel8.Text), out startDate) && DateTime.TryParse(Convert.ToDateTime(metroLabel9.Text), out endDate))
{
// Your data code.
}
Показать значения в текстовом поле, которое производит эту ошибку! Также используйте параметры команды – mybirthname
Используйте параметризованный SQL - это может быть все, что вам нужно. Никогда не ставьте значения непосредственно в SQL, как это. –
Я не уверен, но взгляните на этот вопрос. Надеюсь, это поможет - http://stackoverflow.com/questions/5125076/sql-query-to-select-dates-between-two-dates – RandomStranger