Autor Beitrag
Klabautermann
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: Sa 17.09.05 21:54 
Hallo C#ler,

ich möchte gerne ein kleines C# Programm schreiben, welches mir erlaubt ein Query an eine beliebige ADO.NET Datenbank zu schicken. Zum verbindungsaufbau möchte ich aber nicht den Connection String eingeben sondern mir diesen lieber per Dialog zusammen klicken.

Das Problem ist, das ich keine Idee habe wo ich einen solchen Dialog im .NET Framework finde, kann mir da jemand auf die sprünge helfen?

Gruß
Klabautermann

PS: Nutze Sharp Develop, eine eventuell vorhandene VCL.NET Implementierung würde mir also nicht helfen.
Robert.Wachtel
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 895
Erhaltene Danke: 7

Windows 7 Ultimate x64
D5 Ent, D7 Arch, RAD Studio 2010 Pro, VS 2008
BeitragVerfasst: Sa 17.09.05 22:05 
Klabautermann Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: Sa 17.09.05 22:10 
Cool dankeschön.
MagicAndre1981
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 17.09.05 22:47 
user profile iconKlabautermann hat folgendes geschrieben:


Hallo C#ler,

ich möchte gerne ein kleines C# Programm schreiben, welches mir erlaubt ein Query an eine beliebige ADO.NET Datenbank zu schicken. Zum verbindungsaufbau möchte ich aber nicht den Connection String eingeben sondern mir diesen lieber per Dialog zusammen klicken.



Das geht ganz einfach. Erstell dir eine neue Textdatei und benenne die Endung nach .UDL um. Mit einem Doppelklick erscheint der Dialog wo du alles auswählen kannst. Nach beenden steht der Connection-String in der UDL-Datei. Dann brauchst du beim Start deines Programms den Typ aus der Datei auslesen, deine hoffentlich vorhandene Factory damit füttern und das richtige DataAcess-Object kommt dann zurück. So kannst du voll unabhängig von der DB den Code erstellen, also nix Designer, sondern alles von Hand ;-)

André
Klabautermann Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: So 18.09.05 22:44 
Hallo,
user profile iconMagicAndre1981 hat folgendes geschrieben:
Das geht ganz einfach. Erstell dir eine neue Textdatei und benenne die Endung nach .UDL um. {...}


ich hätte schon gerne ein Knöpfchen in meinem Programm um das zu erledigen. Natürlich könnte mein Programm eine solche Textdatei anlegen und diese dann ausführen, aber das ist so unelegant, weshalb mir ein direckter aufruf lieber währe.

user profile iconRobert.Wachtel hat folgendes geschrieben:
HOW TO: Build a Connection String Programmatically in ADO.NET by Using Visual C# .NET


Da habe ich mal im #Develop ausprobiert, es lässt sich aber leider nicht Compilieren.

Hier einmal der Beispiel Code über den wir reden ([url=support.microsoft.co...310083]Quelle[/url]):

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
MSDASC.DataLinks mydlg = new MSDASC.DataLinks();
ADODB._Connection ADOcon;

//Cast the generic object that PromptNew returns to an ADODB._Connection.
ADOcon = (ADODB._Connection) mydlg.PromptNew();

ADOcon.Open("","","",0);

if (ADOcon.State == 1) {
    MessageBox.Show("Connection Opened");
    ADOcon.Close();
}
else {
    MessageBox.Show("Connection Failed");
}


Der Compiler meckert über das Hervorgehobene Objekt, weil es ihm unbekannt ist.

Das selbe Problem stellt sich auch, wenn ich dieses Projekt herunterlade und Importiere so, dass ich davon ausgehen kann, dass es kein Bug im Beispielcode ist.

Es stellt sich mir (der ich mit C# noch sehr unerfahren bin) also die Frage, wie mache ich es meinem Compiler bekannt?

Gruß
Klabautermann
MagicAndre1981
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 20.09.05 22:59 
user profile iconKlabautermann hat folgendes geschrieben:

user profile iconRobert.Wachtel hat folgendes geschrieben:
HOW TO: Build a Connection String Programmatically in ADO.NET by Using Visual C# .NET


Da habe ich mal im #Develop ausprobiert, es lässt sich aber leider nicht Compilieren.

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
MSDASC.DataLinks mydlg = new MSDASC.DataLinks();
ADODB._Connection ADOcon;

//Cast the generic object that PromptNew returns to an ADODB._Connection.
ADOcon = (ADODB._Connection) mydlg.PromptNew();

ADOcon.Open("","","",0);

if (ADOcon.State == 1) {
    MessageBox.Show("Connection Opened");
    ADOcon.Close();
}
else {
    MessageBox.Show("Connection Failed");
}


Der Compiler meckert über das Hervorgehobene Objekt, weil es ihm unbekannt ist.


Du hast dir das Dokument auch durchgelesen? Da steht, dass du eine Referenz auf COM-Objekte einbinden musst.

On the COM tab, select the following references:
• Microsoft ActiveX Data Objects 2.7
• Microsoft OLEDB Service Component 1.0 Type Library

user profile iconKlabautermann hat folgendes geschrieben:

Das selbe Problem stellt sich auch, wenn ich dieses Projekt herunterlade und Importiere so, dass ich davon ausgehen kann, dass es kein Bug im Beispielcode ist.


Auf CodeProject steht sogar alle noch besser erklärt.

# Reference DataLinks in your project. DataLinks used to be MSDASC.dll, but has changed to OLEDB32.DLL (see KB). This file is located here: C:\Program Files\Common Files\System\Ole DB\OLEDB32.DLL

Wenn du das hinzufügst geht es ;-)

ABER: Warum gehts du den Weg? So nutzt du nur OLEDB-Provider anstatt die coolen managed-Provider für .NET . Und der Firebird hat keinen guten OLEDB-Provider, also fällt der raus, aber dafür einen coolen Managed-Provider.

André
Klabautermann Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: So 02.10.05 16:28 
Hallo,
user profile iconMagicAndre1981 hat folgendes geschrieben:
ABER: Warum gehts du den Weg? So nutzt du nur OLEDB-Provider anstatt die coolen managed-Provider für .NET . Und der Firebird hat keinen guten OLEDB-Provider, also fällt der raus, aber dafür einen coolen Managed-Provider.

das ganze .NET und C# Zeug ist für mich noch höchst experimentell. Was heißen soll, dass ich in diesem Bereich ein absoluter Anfänger bin und meine Möglichkeiten noch in keinester weise überblicke. Sind die "Managed-Provider" eine alternative (ersatz) für die ADO-Variante? Wo kann ich mich da einleisen? Dieses Projekt soll mich ins Feld der Datenbanken unter .NET einführen und daher hätte ich da ncihts gegen eine Erweiterung meines Horizontes ;) (auf wenn es mal länger dauern kann bis ich dazu komme, wie man hier an meiner Reaktionszeit sehen kann :oops:).

Gruß
Klabautermann
Robert_G
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 416


Delphi32 (D2005 PE); Chrome/C# (VS2003 E/A, VS2005)
BeitragVerfasst: So 02.10.05 17:33 
Zitat:
das ganze .NET und C# Zeug ist für mich noch höchst experimentell. Was heißen soll, dass ich in diesem Bereich ein absoluter Anfänger bin und meine Möglichkeiten noch in keinester weise überblicke.

uff :shock:
Dann hätte ich mich in deinem anderen Thread wohl etwas zurückhalten sollen? :angel:
Zitat:
Sind die "Managed-Provider" eine alternative (ersatz) für die ADO-Variante?
Die ADO Alternative gibt es nur rein theorethisch. Ich wüsste nicht warum man sich diesn ADO-Krams noch antun sollte. ;)
Zitat:
Wo kann ich mich da einleisen? Dieses Projekt soll mich ins Feld der Datenbanken unter .NET einführen und daher hätte ich da ncihts gegen eine Erweiterung meines Horizontes ;)
Im MSDN sowie generell im Internet sollte es Tonnen von QuickStarts und Erklärungen zu ADO.Net geben.
Klabautermann Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: So 02.10.05 17:38 
Hi,
user profile iconRobert_G hat folgendes geschrieben:
Zitat:
Wo kann ich mich da einleisen? Dieses Projekt soll mich ins Feld der Datenbanken unter .NET einführen und daher hätte ich da ncihts gegen eine Erweiterung meines Horizontes ;)
Im MSDN sowie generell im Internet sollte es Tonnen von QuickStarts und Erklärungen zu ADO.Net geben.


Nur zum verständnis: Managed-Provider sind teil von ADO.NET und dass womit ich mich da herumquäle ist kassischen Win32 ADO gewarp für .NET?

Gruß
Klabautermann
Robert_G
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 416


Delphi32 (D2005 PE); Chrome/C# (VS2003 E/A, VS2005)
BeitragVerfasst: So 02.10.05 17:39 
user profile iconKlabautermann hat folgendes geschrieben:
Nur zum verständnis: Managed-Provider sind teil von ADO.NET und dass womit ich mich da herumquäle ist kassischen Win32 ADO gewarp für .NET?
Genau! :)
Klabautermann Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: So 02.10.05 17:44 
user profile iconRobert_G hat folgendes geschrieben:
user profile iconKlabautermann hat folgendes geschrieben:
Nur zum verständnis: Managed-Provider sind teil von ADO.NET und dass womit ich mich da herumquäle ist kassischen Win32 ADO gewarp für .NET?
Genau! :)


Ahhh, Groschen ik hör dir klimpern.
Dann werde ich die Aufgabenstellung unter verwendung dieser neuen Erkenntnis noch mal überdenken.

Diese Frage hat sich damit für mich erledigt (das Interesse an einer Antwort für die andere bleibt dennoch bestehen ;)).

Danke euch allen für die Hilfe.

Klabautermann
MagicAndre1981
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 02.10.05 18:03 
user profile iconKlabautermann hat folgendes geschrieben:
user profile iconRobert_G hat folgendes geschrieben:
user profile iconKlabautermann hat folgendes geschrieben:
Nur zum verständnis: Managed-Provider sind teil von ADO.NET und dass womit ich mich da herumquäle ist kassischen Win32 ADO gewarp für .NET?
Genau! :)


Ahhh, Groschen ik hör dir klimpern.
Dann werde ich die Aufgabenstellung unter verwendung dieser neuen Erkenntnis noch mal überdenken.


Hallo Klabautermann,

schau dir mal .NET 2.0 an. In einem Monat ist es ja soweit. Damit kriegst du deine Aufgabe leicht hin.

Mit
DataTable providers = System.Data.Common.DbProviderfactory.GetFactoryClasses();
erhälst du alle .NET Provider, die installiert sind.

Dann kannst du ganz leicht DB-unabhängig programmieren. Mit
ausblenden C#-Quelltext
1:
2:
3:
4:
 DbProviderFactory prov = DbProviderFactories.GetFactor("System.Data.SqlClient");
DbConnection conn = provider.CreateConnection();
conn.ConnectionString = CONNECTIONSTRING;
conn.Open();
erhälst du eine Connection zu einem SQL-Server. Um eine Connection zu einem anderen Server aufzubauen brauchst du nur "System.Data.SqlClient" durch einen anderen Provider zu ersetzen :-)
Ist das nicht cool?

André
Robert_G
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 416


Delphi32 (D2005 PE); Chrome/C# (VS2003 E/A, VS2005)
BeitragVerfasst: So 02.10.05 18:09 
Ich glaube, da hat einer vergessen, dass der Inhalt dieser hässlich groß geschriebenen Variable irgendwoher kommen muss.
Es ging Klabautermann doch darum, dass der User die Db/Anmeldung selbst eingeben kann...
MagicAndre1981
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 02.10.05 18:23 
Hmm Robbi, warum hab ich was falsch verstanden :gruebel:

user profile iconKlabautermann hat folgendes geschrieben:
Hallo C#ler,
ich möchte gerne ein kleines C# Programm schreiben, welches mir erlaubt ein Query an eine beliebige ADO.NET Datenbank zu schicken. Zum verbindungsaufbau möchte ich aber nicht den Connection String eingeben sondern mir diesen lieber per Dialog zusammen klicken.


Dann bastelt er sich einen Dialog selber. Die connectionStrings sind doch dokumentiert. Er kann doch Platzhalter einbauen, die er hann durch eingaben ersetzt -> fertig, oder nicht :gruebel:

André