Entwickler-Ecke

Datenbanken (inkl. ADO.NET) - DataSet füllen aus MS SQL Server Compact (VS 2008)


noidic - Do 27.03.08 21:28
Titel: DataSet füllen aus MS SQL Server Compact (VS 2008)
Mahlzeit,

ich bastle grad mein erstes Datenbankgestütztes Progrämmchen mit WPF. Im Moment möchte ich ein Grid (Xceed) aus einer Tabelle füllen, ganz simpel.

Ich habe im Designer ein DataSet angelegt (EinkaufManagerDataSet) und da auch die fragliche Tabelle hinzugefügt (vendor). Mein Versuch sieht zur Zeit so aus:



C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
    
public partial class VendorAdministration : Window
    {
        private DataTable vendors;
        private DataSet emds;
        public VendorAdministration()
        {
            InitializeComponent();
            emds = new EinkaufManagerDataSet();
            SqlDataAdapter adapter = new SqlDataAdapter("select * from vendor","Data Source=C:\\Users\\noidic\\Documents\\Visual Studio 2008\\Projects\\EinkaufOptimierer\\EinkaufOptimierer\\EinkaufManager.sdf");
            adapter.Fill(emds);
            vendors = emds.Tables["vendor"];
            Xceed.Wpf.DataGrid.DataGridCollectionView dataGridCollectionView = new Xceed.Wpf.DataGrid.DataGridCollectionView(vendors.DefaultView);
            dgVendor.ItemsSource = dataGridCollectionView;
        }
    }


Ich habs zuerst ohne den SqlDataAdapter versucht. Dann hatte ich im Grid zwar die Spalten, aber keine Daten. Die Verbindung DataTable zu Grid scheint also zu funktionieren.

Als nächstes habe ich die beiden Zeilen mit dem SqlDataAdapter hinzugefügt, der ConnectionString stammt aus der Datenbankübersicht.
Der Effekt ist nun der, dass ich beim Aufruf des Fensters die Meldung bekomme, dass die Verbindung zur Datenbank fehlgeschlagen ist.

Die Datenbank ist der MS SQL-Server Compact 3.5, angelegt direkt im VS.

Bevor ich jetzt noch Stunden weiterprobiere, wollte ich mal kurz nachfragen, ob jemand direkt was dazu sagen kann.


Kha - Do 27.03.08 23:33

Sollte man da nicht eher den SqlCeDataAdapter einsetzen ;) ?

PS: Das DataSet musst du nicht selbst erstellen, das lässt sich auch generieren. Sollte es sogar automatisch werden, wenn man eine Datenbank erstellt/hinzufügt.

PPS: Wenn schon WPF, warum dann nicht auch Linq2SQL :mrgreen: ?


noidic - Fr 28.03.08 17:13

Werd das mit dem caedapter mal testen, danke erstmal.

Warum nicht LINQ.. nun, ich wollte mich erstmal an das vermeintlich einfachere begeben, Daten in nem Grid anzuzeigen (komm halt von Delphi, da ist das mit wenigen klicks getan).


noidic - Fr 28.03.08 17:34

Nun gut, umgebaut auf ceAdapter, Assembly referenziert, nun meckert er, dass die sqlcerne35.dll angeblich nicht gefunden werden kann. Die dll ist vorhanden (Verzeichnis C:\Program Files (x86)\Microsoft SQL Server Compact Edition\v3.5). Als Referenz kann ich sie nicht hinzufügen, da das anscheinend kein Assembly ist. Google liefert mir zu dem dll-Namen nicht ein Result, was mich schon verwundert stimmt.

Jemand ne Idee?


JüTho - Fr 28.03.08 18:10

user profile iconnoidic hat folgendes geschrieben:
... nun meckert er, dass die sqlcerne35.dll angeblich nicht gefunden werden kann. Die dll ist vorhanden (Verzeichnis C:\Program Files (x86)\Microsoft SQL Server Compact Edition\v3.5). Als Referenz kann ich sie nicht hinzufügen, da das anscheinend kein Assembly ist.

Wenn die DLL vorhanden ist (und eine NET-Assembly ist), kann sie auch als Referenz hinzugefügt werden. Wenn er diese DLL anmeckert, dann gibt es sie auch als NET-Assembly. (Assembly ist übrigens ein Oberbegriff für EXE und DLL unter NET.) Für die Referenzen gibt es mehrere Quellen: den GAC (dort sind die "normalen" NET-Assemblies), Deine eigenen Projekte und alles andere, was durch "Browse"/"Durchsuchen" hinzugefügt werden kann.

Für solche "Sonderfälle" steht eben die letzte Möglichkeit bereit.

Jürgen


noidic - Fr 28.03.08 19:29

Wenn ich versuche, die Dll als Referenz hinzuzufügen, bekomme ich die Meldung, dass dies nicht geht, ich soll sicherstellen, dass die Datei verfügbar und eine .NET - Assembly oder COM-Bibliothek ist.
Als Datebieschreibung steht bei der dll "managed extensions", managed code war doch nicht-.NET-code, oder?

Ich weiss da im Moment nicht weiter, der Namespace System.Data.SqlServerCe ist verfügbar, aber beim Verbindungsaufbau meckert er halt die DLL an...


JüTho - Fr 28.03.08 20:01

Hallo,

mit "managed code" wird eigentlich "sicherer NET-Code" verstanden. Aber wer weiß, in welchem Zusammenhang mal die eine, mal eine andere Formulierung verwendet wird...

Vorschlag: Aktiviere FUSLOGVW.exe "NET Fusion Log-Viewer"; bei NET 2.0 befindet sich das im Verzeichnis SDK\v2.0\Bin. Das protokolliert alle Versuche, eine Assembly einzubinden, und gibt recht ausführliche Begründungen, wenn etwas schief geht. Unter 3.5 gibt es vielleicht ein anderes Tool dafür; aber so etwas wie ein Logbuch für Fusionsversuche dürfte es trotzdem geben.

Vielleicht erhältst Du auf diesem Weg eine ausführliche Hilfe. Jürgen


noidic - Fr 28.03.08 22:50

Das Tool liefert mir kein Ergebnis, ich habe allerdings auch nur das 2.0-SDK, das 3.5 schlägt bei der Installation fehl.

Ich hab mir die Fehlermeldung mal genauer angeschaut, es scheint, als würde die dll beim Ladeversuch tatsächlich nicht gefunden. Gibt es, ähnlich wie bei Delphi, Suchpfade, die ich vielleicht anpassen müsste?


Kha - Sa 29.03.08 00:14

user profile iconnoidic hat folgendes geschrieben:
Verzeichnis C:\Program Files (x86)\Microsoft SQL Server Compact Edition\v3.5
O lala, ein x64 ;) . Zielplattform (Projekteigenschaften -> Erstellen) auch auf x86 gestellt, wie es so schön versteckt in der Hilfe steht :mrgreen: ?



user profile iconnoidic hat folgendes geschrieben:
nun, ich wollte mich erstmal an das vermeintlich einfachere begeben, [...]
Das nehme ich niemandem ab, der sich mit WPF beschäftigt :lol: . Aber Linq To SQL ist wirklich eher simpel gestrickt (die Allzweck-Kanone kommt erst mit dem Entity-Fx) und ein O/R-Mapper passt imo einfach perfekt zu WPF ;) .


noidic - Sa 29.03.08 00:55

Mh, die Einstellung für das Zielsystem find ich bei mir nicht, kann das sein, dass die bei der Express-Edition garnicht verfügbar ist?


Kha - Sa 29.03.08 11:26

Könnte gut sein, in Verbindung mit Compact wäre das aber natürlich ein Witz :gruebel: .
Aber da sie wohl kaum MSBuild ebenfalls beschnitten haben, sollte der manuelle Weg immer noch funktionieren: Öffne deine .csproj-Datei mit einem Texteditor und füge im ersten PropertyGroup-Abschnitt (der sollte für Debug und Release gleichzeitig gelten) <PlatformTarget>x86</PlatformTarget> ein.


noidic - So 30.03.08 16:57

Nu hab keine Fehlermeldung mehr, dafür wieder ein leeres Grid.. Ich bin jetzt erstmal eien Woche weg, vermutlich werd ich mich danach doch mal mit LINQ beschäftigen.