Удаленный сервер выдает Oracle Ошибка недопустимого месяца - PullRequest
0 голосов
/ 24 февраля 2020

У меня есть интересная ошибка. Эта ошибка происходит только на удаленном сервере, моя функция работает правильно на моем локальном компьютере.

вот мой код;

        public bool GecisKontrol(KisiModel km)
    {
        bool varmi = false;
        //today without hours and minutes
        string bugun = DateTime.Now.ToString("dd/MM/yyyy");
        using (OracleConnection con = new OracleConnection())
        {
            con.ConnectionString = "Data Source=(DESCRIPTION="
                 + "(ADDRESS=(PROTOCOL=TCP)(HOST=xxx.xxx.xxx.x)(PORT=1521))"
                 + "(CONNECT_DATA=(SERVICE_NAME=xxxxxx)));"
                 + "User Id=xxxxxx;Password=xxxx;";
            con.Open();
            using (OracleCommand cmd = new OracleCommand())
            {
                cmd.Connection = con;
                if (km.GECISDURUM == 0)
                {
                    //Normaly, i store variable ZAMAN as dd/MM/yyyy HH:mm
                    //But i need to compare as date, because of this i used TRUNC(ZAMAN)
                    cmd.CommandText = "select * from YENI_OTOMASYON_GECISLER WHERE TCKIMLIK = :1 and YEMEKHANEID = :2 and OGUNID = :3 and TRUNC(ZAMAN) = :4 and GECISDURUM = :5";
                    cmd.Parameters.Add(new OracleParameter("1",
                   OracleDbType.Varchar2,
                   km.TCKimlik,
                   ParameterDirection.Input));
                    cmd.Parameters.Add(new OracleParameter("2",
                   OracleDbType.Varchar2,
                   YemekHaneID,
                   ParameterDirection.Input));
                    cmd.Parameters.Add(new OracleParameter("3",
                   OracleDbType.Varchar2,
                   OGUNID,
                   ParameterDirection.Input));
                   //I am sure, problem is here...
                    cmd.Parameters.Add(new OracleParameter("4",
                   OracleDbType.Date,
                   Convert.ToDateTime(bugun),
                   ParameterDirection.Input));
                    cmd.Parameters.Add(new OracleParameter("5",
                   OracleDbType.Varchar2,
                   km.GECISDURUM,
                   ParameterDirection.Input));
                }



                using (OracleDataReader dr = cmd.ExecuteReader())
                {
                    if (dr.Read())
                    {
                        varmi = true;
                    }
                    else
                    {
                        varmi = false;
                    }
                }
            }
            con.Close();
        }
        return varmi;
    }

Когда я запускаю этот код на своем локальном компьютере, я никогда не получаю сообщение об ошибке. Выдает ошибку только на удаленном сервере. У меня недостаточно информации об удаленном сервере. Этот администратор сервера не делится информацией. Кстати, столбец с именем «ZAMAN» - это DATE.

1 Ответ

2 голосов
/ 24 февраля 2020

Уберите время из вашей c# даты и времени, но сохраните его как дату. Делая bugun строку и помещая ее в параметр типа даты sql, вы заставляете oracle проанализировать вашу строку обратно к дате, и это не удается, потому что сервер использует другой язык вашей машины

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