Avatar billede javanewbie11 Nybegynder
31. juli 2003 - 13:20 Der er 11 kommentarer og
1 løsning

System.InvalidCastException: Specified cast is not valid.

Jeg er newbie i C#....
Jeg får denne exception ved udtræk fra databasen.
Jeg kører med en access database.

Er der nogen der kan hjælpe?

Her er lidt kode:

stampSQL = "SELECT * FROM STAMPS";
adapter = new OleDbDataAdapter(stampSQL, cnx);
adapter.Fill(dSet, "Stamps");
dTable = dSet.Tables["Stamps"];

//alle rækkerne fra Stamps-tabellen.
foreach(DataRow Row in dTable.Rows)
{
int nr = (int) Row[1];
string beskr = (string) Row[2];
int udgAar = (int) Row[3];
double pris = (double) Row[4];
int antal = (int) Row[5];
string brugsper = (string) Row[6];
string billedeUrl = (string) Row[7];
string land = (string) Row[8];

Stamp s = new Stamp(nr, beskr, udgAar, pris, antal, brugsper, billedeUrl, land);

arrStamps.Add(s);
Avatar billede chries Nybegynder
31. juli 2003 - 13:35 #1
En af dine cast er forkert. Nu ved jeg ikke hvordan det database værk virker, men er 0 ikke det første element ?

int nr = (int) Row[0];
...
Avatar billede quaser Nybegynder
31. juli 2003 - 13:36 #2
int nr = (Int32)Row[1];
Avatar billede z42cool Nybegynder
31. juli 2003 - 13:42 #3
Hvis din 1. kolonne er at autogenereret id, så er der en god chance for at det er af typen System.Decimal. I så tilfælde er det nødvendigt at:

int nr = (int)((Decimal)Row[1]);

quaser>> I c# er der ikke forskel på (int) og (Int32) idet int blot er et keyword mappet direkte til System.Int32 typen.
Avatar billede quaser Nybegynder
31. juli 2003 - 14:01 #4
Ahh ja, kommer sig nok af at jeg starede ud med at få exceptions fordi jeg brugte int nr = (int)Row[1];
Når det drejede sig om en smallint i databasen.

Har dog ikke hørt om nogle der sætter en autogeneret column til at være decimal.

javanewbie11>> Når du får fejlbeskeden står der så ikke hvad linie det drejer sig om?
Som chries antyder kan det være fordi at du har overset at 0 er det første element.
Avatar billede z42cool Nybegynder
31. juli 2003 - 15:09 #5
quaser>> Jeg har ikke nogen erfaringer med Access, men en int kolonne der er markeret identity (auto genereret) i MSSQL bliver af System.Data.SqlClient klasserne returneret som en System.Decimal - på trods af at det er en integer i databasen!!!!
Avatar billede quaser Nybegynder
31. juli 2003 - 15:20 #6
z42cool >> Okay, lyder underligt.
Jeg benytter også SqlClient og MSSQL. Jeg får godt nok returneret en IDataReader, istedet for SqlDataReader, men lyder da også underligt hvis det skulle have noget at sige.

Om ikke andet kan jeg fint cast den til en int.
Avatar billede javanewbie11 Nybegynder
31. juli 2003 - 20:39 #7
Det var det med Int32 og Decimal, takker :)
Avatar billede z42cool Nybegynder
01. august 2003 - 08:37 #8
javanewbie11>> Hvis det var det med Int32 og Decimal hvorfor skal quaser så have point?
Avatar billede javanewbie11 Nybegynder
01. august 2003 - 08:50 #9
Sorry, det var en fejl. Du skulle have haft dem. Jeg beklager meget :(
Avatar billede z42cool Nybegynder
01. august 2003 - 08:53 #10
LOL - Jeg lever nok til at se endnu en dag!!!! Ville bare lige kommentere det :-)
Avatar billede quaser Nybegynder
01. august 2003 - 09:48 #11
Uuuuh vildt gratis point, så ligger jeg på 823 pladsen =P
Avatar billede javanewbie11 Nybegynder
01. august 2003 - 09:52 #12
He he
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester