Получить данные с даты на дату - PullRequest
0 голосов
/ 25 октября 2018

Я новичок в программе Oracle и C #.Сейчас я пытаюсь создать программу кодирования для извлечения данных из базы данных Oracle с использованием datetimepicker от даты к дате, и я хочу показать ее в виде таблицы с использованием C #.Но у меня возникли проблемы, когда я попробовал это, я получил информацию об ошибке, подобную этой {"ORA-01843: недопустимый месяц"} .Я пытался решить эту проблему многими способами, но я не нашел ее.Кто-нибудь здесь знает, как решить эту проблему?Вот моя программа кодирования

OracleDataAdapter sda = new OracleDataAdapter(@"SELECT
  A.LINE_CD
, A.ITM_CD
, B.ITM_NM
, A.ACT_CAVITY AS CAVITY
, A.INST_NO AS MFG_NO
, A.PROD_SCHD_QTY AS SCHD_QTY
, A.PROD_ST_SCHD_DT AS START_SCHD
, A.PROD_END_SCHD_DT AS END_SCHD
, A.SHIFT
, TO_CHAR(A.PROD_DT,'DD/MM/YYYY') AS PROD_DT
, A.PROD_RESULT
, A.TF_FG
, SUM(A.PROD_RESULT) AS TOTAL_PROD
, SUM(A.TF_FG) AS TOTAL_TRANSFER
, SUM(A.PROD_RESULT - A.TF_FG) AS LOSS_TRANSFER
FROM TMCI_IM_PROD A 
  INNER JOIN CM_HINMO_ALL B 
    ON A.ITM_CD=B.ITM_CD 
WHERE 
     A.PROD_RESULT <= A.PROD_SCHD_QTY AND
     A.PROD_ST_SCHD_DT BETWEEN '" + txtPRODSTSCHDDT.Value.ToString() + "'
      AND '" + txtPRODSTSCHDDT2.Value.ToString() + "' 
GROUP BY
  A.LINE_CD
, A.ITM_CD
, B.ITM_NM
, A.ACT_CAVITY
, A.INST_NO
, A.PROD_SCHD_QTY
, A.PROD_ST_SCHD_DT
, A.PROD_END_SCHD_DT
, A.SHIFT
, A.PROD_DT
, A.PROD_RESULT
, A.TF_FG 
ORDER BY A.PROD_ST_SCHD_DT DESC", con);                                                   
DataTable data = new DataTable();
sda.Fill(data);
dataGridView1.DataSource = data;

Ответы [ 3 ]

0 голосов
/ 25 октября 2018

Вы можете использовать функцию оракула TO_DATE в сочетании с ToString () с указанным пользовательским форматом, например,

A.PROD_ST_SCHD_DT BETWEEN TO_DATE("+ txtPRODSTSCHDDT.Value.ToString("dd/MM/yyyy")+", 'DD/MM/YYYY') ...

Один дополнительный комментарий: хорошо рассмотреть использование параметризованных запросов, которые предотвращают внедрение SQL и имеют лучшую производительность.

0 голосов
/ 25 октября 2018

Если вы не изменили его, формат даты по умолчанию Oracle - ДД-МММ-ГГГГ (например, 24 октября 2018 года).Ваш PL / SQL написан так, чтобы ожидать, что текстовое поле будет иметь дату в этом формате.Для конечного пользователя было бы необычно иметь этот формат даты в пользовательском интерфейсе, поэтому вполне вероятно, что в вашем текстовом поле есть другой формат даты, например 24.10.2008.Это не удастся, потому что Oracle не знает, как интерпретировать дату из вашего пользовательского интерфейса.

Вам необходимо стандартизировать формат даты входного текстового поля в вашем коде, прежде чем передавать его в запрос Oracle.

0 голосов
/ 25 октября 2018

Вы проверили, получаете ли вы действительные значения даты из txtPRODSTSCHDDT.Value.ToString () и txtPRODSTSCHDDT2.Value.ToString ()?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...