Witam czy ktoś wie jak do VC# podpiąć bazę w exelu??
I jak skojarzyć dane z combobox właśnie z tą bazą?
Proszę o pomoc
Najprostszy przykład (z zakomentowanym connection string dla dwóch wersji plików):
Te wszystkie informacje zostają w głowie na przyszłość.
Ale mam teraz jeszcze jeden mały problem.
TZN.
saddams85 napisał:Oledb jest z biblioteki System.Data, to ją musisz dodać przez AddReference, chociaż dla domyślnego projektu już jest dodana. Ty musisz jedynie zadeklarować przestrzeń nazw:I czy powinienem dodać jeszcze z menu "project -> addreference->OleDb??
Spoko do tego okienka potrzebny mi tylko jedna komórka oczywiście jest tam wiele innych rzeczy które są mi potrzebne. Wyskakuje mi błąd
Warning 1 Cannot find wrapper assembly for type library "DTSLib". Carl Stahl Konfigurator klasa8 i 10
Warning 2 The referenced component 'DTSLib' could not be found.
Dlaczego tak jest??
A korzystasz w tym projekcie z jakiś dodatkowych komponentów / bibliotek? Zobacz w referencjach czy nie ma jakiejś biblioteki z żółtym wykrzyknikiem. Wygląda na to, że czegoś brakuje.
To co masz to nie błąd, tylko warning, program powinien się mimo wszystko skompilować. Możesz też spróbować usunąć cały katalog obj z katalogu z projektem, a potem ponownie otworzyć i skompilować program.
No sprawdziłem i nie znalazłem żadnego wykrzyknika.
Podczas debugowania pojawiaja mi sie takie informacje:
The source file is difrent from when the module was built. Would you like the debugger to use it anyway.
Klikam tak a potem pokazuje mi się coś takiego:
Pierwszy problem - to czy próbowałeś usunąć cały katalog obj z folderu z projektem (zrób przedtem kopię całego projektu na wszelki wypadek)? Spróbuj też usunąć katalogi Debug i Release, oczywiście przy zamkniętym projekcie, a potem otworzyć projekt .sln i przebudować go (Build->Rebuild Solution). Miałem kiedyś podobny problem, jak pracowałem nad jednym projektem w domu i w pracy, ale już nie pamiętam jak to rozwiązałem, możliwe że tak jak to teraz opisałem...
Drugi błąd - to czy plik .xls jest w podanej lokalizacji na dysku H??
PS. Rozumiem, że na komputerze gdzie masz Visual Studio jest też Excel zainstalowany?
Spróbuj utworzyć nowy projekt, dla testów: prosty program w takiej formie, jak Ci przedstawiłem wcześniej (jeden button i textbox). Czy wtedy też masz te komunikaty?
Bo Kolega niedokładnie czyta - a może ja nie dość to zaakcentowałem...
W kodzie #4 są dwa connection stringi, jeden zakomentowany. Ten zakomentowany jest dla plików xlsx, ten odkomentowany - dla plików xls. Używają innych wersji aparatu danych, i dla łączenia z xlsx musisz zakomentować (lub usunąć) ten pierwszy, a odkomentować drugi.
Druga sprawa - jeżeli chcesz odczytać wartość tylko jednej komórki, tak jak masz w #15, to użyj kodu który podałem w #10. Jest tam jedna istotna zmiana: parametr HDR w connection stringu jest ustawiony na No, przez co pierwsza odczytana komórka zostanie od razu wykorzystana jako komórka z danymi. W tej wersji którą Ty przedstawiłeś, dostaniesz pustą listę, ponieważ wykonanie readera na zakresie Arkusz1$A1:A1 z HDR=Yes spowoduje, że pierwsza (i jedyna) odczytana wartość zostanie potraktowana jako nagłówek i pominięta w zwracanych danych.
Podsumowując:
- chcesz czytać z plików .xls -> użyj connection string z Provider=Microsoft.Jet.OleDb.4.0
- chcesz czytać z plików .xlsx -> użyj connection string z Provider=Microsoft.ACE.OLEDB.12.0
- jeżeli w odczytywanym zakresie pierwszy wiersz to nagłówek -> ustaw HDR=Yes, jeżeli nie -> HDR=No
- jeżeli chcesz odczytać zakres kilku danych, które potem wrzucasz np. do Comboboxa -> użyj kodu #4 z ExecuteReader(),
- jeżeli chcesz odczytać tylko jedną wartość z konkretnej komórki -> użyj kodu #10 z ExecuteScalar()