Avatar billede jps6kb Novice
30. marts 2009 - 10:16 Der er 7 kommentarer og
1 løsning

Database konvertering

Hey,

Jeg har nogle data som jeg skal have overført fra en MySql tabel via en Console app.

Jeg har dog et par enkelte problemer...

1.
Jeg kan ikke umiddelbart finde en passende datatype i MSSQL2008 til at kopiere MySql Blob over i.

2.
Jeg kan ikke få min SqlCommand til at acceptere at en DateTime parameter kan være null - selvom alle felter i MSSQL har allow null.

Ex.:

MSCmd.Parameters.Add("@endato", SqlDbType.DateTime).Value = !OraRdr.IsDBNull(OraRdr.GetOrdinal("endato")) ? OraRdr.GetDateTime(OraRdr.GetOrdinal("endato")) : null;

Har i styr på det? :)
Avatar billede aaberg Nybegynder
30. marts 2009 - 10:27 #1
1.
En blob i Sql Server hedder "Image". Ikke spørg mig hvorfor! Tydeligvis havde Microsoft ikke fantasi til at forestille sig andre brugsområde til en BLOB, end billeder.

2.
I stedet for at sætte kolonnen til NULL, prøv at sætte den DBNull.Value:

MSCmd.Parameters.Add("@endato", SqlDbType.DateTime).Value = !OraRdr.IsDBNull(OraRdr.GetOrdinal("endato")) ? OraRdr.GetDateTime(OraRdr.GetOrdinal("endato")) : DBNull.Value;
Avatar billede jps6kb Novice
30. marts 2009 - 10:44 #2
Jeg har faktisk forsøgt mig med Image, men prøver lige igen.
DBNull.Value fik jeg også busted. Den ville ikke æde den, men tilsyneladende har jeg bedre held med System.Data.SqlTypes.SqlDateTime.Null

Jeg vender lige tilbage ang. Blob.
Avatar billede jps6kb Novice
30. marts 2009 - 13:19 #3
Jeg så lige, at jeg havde lavet en fejl i spm. Det er en Oracle og ikke MySql. :)

Jeg har forsøgt mig med Image og Blob, men uden held.
Umiddelbart kan jeg ikke se at der skulle være en direkte måde at kopiere det... nogle forslag?
Avatar billede aaberg Nybegynder
30. marts 2009 - 14:12 #4
Det skal virke med en Image kolonne! Kan jeg se koden du bruger?
Avatar billede aaberg Nybegynder
30. marts 2009 - 14:18 #5
En Image kolonne skal altså virke!

For at inserte i en Image kolonne, skal du have data liggende i et byte[] array. Det bliver noget lignende dette:

byte[] data = GetBlobDataFromOracleDB()

MSCmd.CommandText = "insert into table (myImage) value (@blob)";
SqlParameter blobParam = new SqlParameter("@blob", System.Data.SqlDbType.Image)
blobParam.Value = data;
MSCmd.Parameters.Add(blobParam);

MSConn.Open();
MSCmd.ExecuteNonQuery();
MSConn.Close();
Avatar billede jps6kb Novice
30. marts 2009 - 14:22 #6
Jeg sætter min parameter således:

MSCmd.Parameters.Add("@billede", SqlDbType.Image).Value = !OraRdr.IsDBNull(OraRdr.GetOrdinal("billede")) ? OraRdr.GetOracleBlob(OraRdr.GetOrdinal("billede")) : null;

Altså, resten fungere helt super (hvis jeg ikke indsætter feltet).
Der er 43 felter og ud af disse er denne ene en Blob.

SqlDbType.Image og Oracle.DataAccess.Types.OracleBlob passer bare ikke sammen...
Avatar billede jps6kb Novice
30. marts 2009 - 14:48 #7
MSCmd.Parameters.Add("@billede", SqlDbType.Image).Value = OraRdr.GetOracleBlob(OraRdr.GetOrdinal("billede")).Value;

Det virkede jo. Smider du et svar?
Avatar billede aaberg Nybegynder
30. marts 2009 - 14:54 #8
:-)
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