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

Odpowiedz Nowy wątek
2015-01-11 18:00
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).


"Czego krzyczysz... co noga? A tamtemu głowę urwało i nie krzyczy, a ty o takie głupstwo." - JP

Pozostało 580 znaków

2015-01-11 18:49
ne0
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ć.


Pomogłem? To dobrze :)
TryParse tylko stringa przyjmuje. - dam1an 2015-01-11 18:53

Pozostało 580 znaków

2015-01-11 18:52

Spróbuj tak:

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

Pozostało 580 znaków

2015-01-11 22:07
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?
:-|


"Czego krzyczysz... co noga? A tamtemu głowę urwało i nie krzyczy, a ty o takie głupstwo." - JP
edytowany 2x, ostatnio: furious programming, 2015-01-11 22:26
Pamiętaj o wstawianiu kodu w znaczniki kolorujące składnię; - furious programming 2015-01-11 22:26
BTW: połączyłem Twoje posty w jeden; - furious programming 2015-01-11 22:27
Nie mogłem wstawić znaczników kolorujących w czasie, gdy byłem "Białym Samcem". - mimirus 2015-01-11 22:34
Wiem, piszę tylko, abyś o nich pamiętał; Tzn. wstawić mogłeś (zanim wysłałeś posta), ale nie mogłeś edytować posta już po opublikowaniu; - furious programming 2015-01-11 22:35

Pozostało 580 znaków

2015-01-11 22:16
0

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

Bardzo dziękuję za odpowiedzi. - mimirus 2015-01-11 22:35

Pozostało 580 znaków

2015-01-12 12:16
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.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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