Claude Hitech Ответов: 2

Запрос SQL с помощью datetimepicker в C#


Я пытаюсь запросить SQL Server с помощью C# и dateTimePicker. Но мой SQL-сервер использует тип VARCHAR в строке date_time. Как я могу преобразовать datetime в VARCHAR?

Строка в SQL находится в формате VARCHAR примерно так: 20171106101700 (год/месяц/день/час/минута/сек)

А SQL-код в c# таков:

comando.CommandText = "Select ID, BIRTH_TIME, NAME, ADDRESS, PHONE, COUNTRY from USERDB where BIRTH_TIME Like "' + this.dateTimePicker.Value.ToString("yyyyMMdd") + "'";


Спасибо!

Что я уже пробовал:

преобразование с помощью

Convert(varchar(8), BIRTH_TIME, 112)

PIEBALDconsult

Во-первых, исправьте базу данных; всегда храните даты как даты и никогда как строки.
Во-вторых, используйте параметризованный оператор, никогда не используйте конкатенацию для их формирования.

GKP1992

Как указывал PIEBALDconsult, хранение дат в виде строк в базе данных-ужасная идея. Я могу придумать только одну причину, по которой кто-то сделал бы это, - это возможность использовать предложение like и т. д., Но даже тогда у него есть какие-то преимущества. Это просто замедляет работу вашего сервера БД. Пожалуйста, используйте DateTime.

Claude Hitech

Я не могу изменить никаких параметров SQL, потому что я не администратор.

2 Ответов

Рейтинг:
1

Santosh kumar Pithani

DECLARE @dt Datetime =(select '2017-11-06 10:17:00');

SELECT SUBSTRING(CONVERT(VARCHAR(10),DT,112),1,8) AS DT
   FROM (SELECT @dt as DT)as ff 
    where '20171106101700' 
      like 
     '%'+SUBSTRING(CONVERT(VARCHAR(10),@dt,112),1,8)+'%';

SELECT DT
   FROM (SELECT SUBSTRING(CONVERT(VARCHAR(10),@dt ,112),1,8) AS DT)as ff 
    where 
      SUBSTRING(DT,1,8)=SUBSTRING(CONVERT(VARCHAR(10),@dt,112),1,8)
----
DT
----
20171106
---------------------------------------------------------

SELECT ID,BIRTH_TIME,NAME,ADDRESS,PHONE,COUNTRY 
  FROM  USERDB
    WHERE 
     CONVERT(VARCHAR(20),BIRTH_TIME,112) 
            LIKE 
    '%'+SUBSTRING(CONVERT(VARCHAR(20),dateTimePicker,112),1,8)+'%'


Claude Hitech

Здравствуй, дорогой...Я пытался использовать это, но есть ошибка:

Системы.Данных.Sqlclient как.Sqlexception в
HResult=0x80131904
Message=недопустимое имя столбца 'dateTimePicker'.

Santosh kumar Pithani

если "dateTimePicker" является недопустимым столбцом для вас, то вы должны передать действительное имя столбца "DateTIME" или параметр даты(@DateTime) вместо этого "dateTimePicker".
Я обновил запрос с примером проверьте его и дайте мне знать

Рейтинг:
0

Karthik_Mahalingam

смотрите рекомендации в разделе комментариев
попробуйте этот код

string value =  this.dateTimePicker.Value.ToString("yyyyMMdd");
          string query = "Select ID, BIRTH_TIME, NAME, ADDRESS, PHONE, COUNTRY from USERDB where SUBSTRING(BIRTH_TIME, 1, 8) = @birth ";
          SqlCommand cmd = new SqlCommand(query,con);
          cmd.Parameters.Add("@birth",value);


Примечание : Форматирование строки sql-запроса выполняется следующим образом уязвимый к SQL-инъекция[^] атаки
всегда использовать Параметризованные запросы для предотвращения атак SQL-инъекций в SQL Server[^]