Jak uniknąć InvalidCastException przy SELECT MAX(ID) ?

0

Witam na pokładzie VS2012+Access,

Mam procedurę sprawdzającą MAX(ID):

int MaxId()
{
    try
    {
        OleDbConnection oConn = new OleDbConnection();
        oConn.ConnectionString = connDB;
        OleDbCommand oCmd = new OleDbCommand();
        oCmd.Connection = oConn;
        oCmd.CommandType = CommandType.Text;
        oCmd.CommandText = "SELECT  MAX(ID) FROM TABLICA";
        oConn.Open();
        int i = -2;
        // tu potrzebny warunek, ale jaki ???
        i = (int)oCmd.ExecuteScalar();  // błąd rzutowania, gdy pusta tablica
        return i;
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.ToString());
    }
    return -1;
}

Jeśli tablica jest pusta to błąd InvalidCastException.
Czy można temu zapobiec jakimś prostym if’em lub o... a może jakieś inne zapytanie... ?
Dziękuję i pozdrawiam
P.S.
Na razie mam pomysł tylko na wykonanie wcześniej procedury jak powyższa, ale z Count(*) i jeśli 0, to pomijam MAX(ID).

1

Po pierwsze używaj metody TryParse. Po drugie wynik tego zapytania wstaw do zmiennej i ją sprawdzaj czy jest null, jeśli nie jest, to wtedy spróbuj rzutować.

1

Spróbuj tak:

var result = oCmd.ExecuteScalar();
if(result != null)
{
    //i tu możesz rzutować
}
0

Dzięki chłopaki !!!!
Wasze odpowiedzi połączyłem z wcześniejszymi sugestiami z internetu i WYSZŁO OK:

var result = oCmd.ExecuteScalar();
if (result.GetType() != typeof(DBNull))
{
    int i;
    i = (int)result;
    return i;
}
else
    return 0;

Miodzio, miodziunio, miodziunissimo...
:-)

Dziwne.
Nie zauważyłem, że nie byłem zalogowany i wpisałem powyższą odpowiedź, a dopiero później, gdy chciałem sformatować tekst, zauważyłem, że dopisała się pod "Biały Samiec".

O co chodzi ?

Pytanie: jak to możliwe?
:-|

0

Mamy tu takie coś co losuje nick jeśli piszesz niezalogowany.

1

Oprócz powyższego rozwiązania, możesz też zapewnić, żeby samo zapytanie nie zwróciło nulla. Na przykład dla MSSQL:

SELECT ISNULL(MAX(ID),0) from TABLICA

Na marginesie, tablica to nie tabela.

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