Avatar billede agermose Nybegynder
24. april 2003 - 14:25 Der er 4 kommentarer og
1 løsning

læse excel via odbc

Jeg forsøger mig pt. med følgende:

using (OdbcConnection connection = new OdbcConnection("Driver={Microsoft Excel Driver (*.xls)};READONLY=TRUE;DSN='';DBQ=C:\\Temp\\Test.xls"))
            {
                connection.Open();
...

AspNet brugeren har rettigheder til både Temp og xls filen, Driveren findes... Men jeg får følgende når jeg forsøger at kører koden:

Exception Details: Microsoft.Data.Odbc.OdbcException: ERROR [HY000] [Microsoft][ODBC Excel Driver]General error Unable to open registry key 'Temporary (volatile) Jet DSN for process 0x6b4 Thread 0x674 DBC 0x783b3ec Excel'. ERROR [IM006] [Microsoft][ODBC Driver Manager] Driver's SQLSetConnectAttr failed ERROR [HY000] [Microsoft][ODBC Excel Driver]General error Unable to open registry key 'Temporary (volatile) Jet DSN for process 0x6b4 Thread 0x674 DBC 0x783b3ec Excel'. ERROR [HY000] [Microsoft][ODBC Excel Driver] Disk or network error. ERROR [HY000] [Microsoft][ODBC Excel Driver]General error Unable to open registry key 'Temporary (volatile) Jet DSN for process 0x6b4 Thread 0x674 DBC 0x783b3ec Excel'. ERROR [HY000] [Microsoft][ODBC Excel Driver]General error Unable to open registry key 'Temporary (volatile) Jet DSN for process 0x6b4 Thread 0x674 DBC 0x783b3ec Excel'. ERROR [HY000] [Microsoft][ODBC Excel Driver] Disk or network error.


Let læseligt :-D Anyways... hvad er problemet?

Jan
Avatar billede burningice Nybegynder
24. april 2003 - 16:06 #1
sikker på at du også har adgang til regestry. Det har man pr. default, men jeg oplevet servere hvor sikkerheden er blevet strammet en tand for meget.

Det du også kan gøre er at hente FileMon og RegMon fra SysInternals. De to kan vise dig hvilke filer og keys bliver tilgået hvornår, af hvem og om det mislykkedes :)
Avatar billede agermose Nybegynder
28. april 2003 - 13:31 #2
opdatering: (dermed også, at dit svar, cyberfessor, desvære ikke hjalp :-( )

vi har rodet med en anden måde at connecte på, men det har ingen effekt, men coden ser ud som følger:

string file = "c:\\temp\\CVRTest.xls";
strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + file + ";Extended Properties=\"Excel 8.0;HDR=no;\"";

myCommand = new OleDbDataAdapter("SELECT * FROM [Sheet1$]", strConn);
myCommand.Fill(myTable);

De fleste hos os bruger .NET 1.1 på XP, og det ser ud til at være problemet? Hvis vi kører vores kode på Win2000/XP med .NET 1.1, så virker det hele uden problemer...

Sååå nu er det vel mest et spørgsmål om et kode eksempel, som kører på XP/.NET 1.1 og ellers gør det samme. Læser fra et excel ark.
Avatar billede burningice Nybegynder
28. april 2003 - 13:55 #3
agermose>> eller lade være med at bruge .Net 1.1 ;) der er sq ikek andet end bøvl med det :/
Avatar billede reffak Nybegynder
29. april 2003 - 12:33 #4
Jeg har åbnet excel filer med følgende funktion (beklager vb.net kode, men du kan sikkert oversætte):

Friend Function GetExcelView(ByVal Filename As String, ByVal Sql As String, Optional ByVal AsText As Boolean = False) As DataView
       
Dim ExtProperties = "Excel 8.0;"
If (AsText) Then ExtProperties = ExtProperties & "IMEX=1;TypeGuessRows=4;"
Dim OleConnString As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=""" & Filename & """;Extended Properties = """ & ExtProperties & """"

Dim OleDA As OleDbDataAdapter = New OleDbDataAdapter(Sql, OleConnString)
Dim ds As New DataSet()
OleDA.Fill(ds)
GetExcelView = ds.Tables(0).DefaultView
OleDA.Dispose()
OleDA = Nothing

End Function

Der er EN SUPERVIGTIG TING at bemærke: "IMEX=1;TypeGuessRows=4;".
Denne linje sørger for, at excel tvinges til at tolke kolonner som indeholdende TEKST. I modsat fald vil excel - baseret på de første 4 rækker - evt. anslå indholdet som værende en tal-kolonne, og dermed ignorer tekst der følgende kunne opstå. Altså står man tilbage med et halvtomt dataset.
Det tog mig tonsvis af tid at finde denne information.

MVH
Avatar billede agermose Nybegynder
09. maj 2003 - 08:49 #5
humm ok, der kom jo ikke rigtig noget ud af det. Som sagt, så virker det allerede under .NET1.0 og der er jo ikke nogen løsning på bordet til 1.1 - men jeg vil jo gerne give Jer begge for at i gad give et bud... sååå
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