Pobieranie daty z bazy danych - sysyem.invaliCastException: Column contains null data at oracle

0

Mam problem z datą, w bazie danych data na pewno jest wpisana, widzę to w SQLDeveloper. Dostaję błąd sysyem.invaliCastException: Column contains null data at oracle. Nawet metoda GetType na tym polu zwraca, że ma być typu DateTime. Kombinuję na różne sposoby, ale dalej to samo. Będę wdzięczny za pomoc.

 
            String queryString = "SELECT * FROM ZLECENIA WHERE IDZLECENIA = " + idOrder;
            using (OracleConnection connection = new OracleConnection(connectionString))
            {
                DateTime dt1 = new DateTime();
                DateTime dt2 = new DateTime();

                OracleCommand cmd = connection.CreateCommand();
                cmd.CommandText = queryString;
                try
                {
                    connection.Open();
                    OracleDataReader reader = cmd.ExecuteReader();
                    while (reader.Read())
                    {
                        dt1 = Convert.ToDateTime(reader["TERMINZAKONCZENIAPROJEKTU"]);
                        dt2 = Convert.ToDateTime(reader["TERMINZAKONCZENIAZADANIA"]);

                        
                        Convert.ToDateTime(reader.GetValue(8));
                        Convert.ToDateTime(reader.GetValue(10));
                        
                        order = new Order(
                            reader.GetDecimal(0),
                            reader.GetDecimal(1),
                            reader.GetString(2),
                            reader.GetString(3),
                            reader.GetString(4),
                            reader.GetString(5),
                            reader.GetString(6),
                            reader.GetString(7),
                            dt1,
                            reader.GetString(9),
                            dt2,
                            reader.GetString(11));

                    }
                    
                    reader.Close();
                    return order;
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Bład pobierania danych. " + ex);
                    return null;
                }
            }
        }

fwfe.PNG

0

W której linijce to wywala? Jak ustawisz break point za tą linią OracleDataReader reader = cmd.ExecuteReader();to możesz podejrzeć co tam jest w reader? btw Tak od razu szukasz błędu w dacie a data po ang nie oznacza daty po polsku.

0

@dam1an no masz rację z tą datą(takie przeoczenie wstyd). Data jest raczej ok.
debug.PNG
debug2.PNG

W sumie mam dwa wpisy w bazie, w jednym rzeczywiście jest wartość null, ale jak wybieram ten bez żadnych null to i tak pojawia się ten błąd.

 
        public Order SelectOrderAboutID(decimal idOrder)
        {

            //Order order = null;
            Order order = new Order(0, 0, "", "", "", "", "", "", DateTime.Now, "", DateTime.Now, "");
            
            string queryString = "SELECT * FROM ZLECENIA WHERE IDZLECENIA = " + idOrder;
            using (OracleConnection connection = new OracleConnection(connectionString))
            {
                DateTime dt1 = new DateTime();
                DateTime dt2 = new DateTime();

                OracleCommand cmd = connection.CreateCommand();
                cmd.CommandText = queryString;
                try
                {
                    connection.Open();
                    OracleDataReader reader = cmd.ExecuteReader();
                    while (reader.Read())
                    {
                        dt1 = Convert.ToDateTime(reader["TERMINZAKONCZENIAPROJEKTU"]);
                        dt2 = Convert.ToDateTime(reader["TERMINZAKONCZENIAZADANIA"]);

                        
                        Convert.ToDateTime(reader.GetValue(8));
                        Convert.ToDateTime(reader.GetValue(10));
                        
                        order = new Order(
                            reader.GetDecimal(0),
                            reader.GetDecimal(1),
                            reader.GetString(2),
                            reader.GetString(3),
                            reader.GetString(4),
                            reader.GetString(5),
                            reader.GetString(6),
                            reader.GetString(7),
                            dt1,
                            reader.GetString(9),
                            dt2,
                            reader.GetString(11));

                    }
                    
                    reader.Close();
                    return order;
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Bład pobierania danych. " + ex);
                    return null;
                }
            }
        }
0
Convert.ToDateTime(reader.GetValue(8));
Convert.ToDateTime(reader.GetValue(10));

Nie wiem czemu to ma służyć.

Sprawdź w której linijce to się wypieprza. Tak po screenach to raczej nikt Ci nie pomoże musisz sam dojść co jest nie tak.

0

Czy jest jakieś InnerException w tym wyjątku, który przechwytujesz?

1

Może wejdź w Debug -> Exception zaznacz Common Language Runtime Exceptions w kolumnie Thrown. I od razu zobaczysz w której której linijce się to wywala.

1 użytkowników online, w tym zalogowanych: 0, gości: 1