Entwickler-Ecke
Datenbanken (inkl. ADO.NET) - Datenbank ohne Server
krare - Mo 16.05.11 15:55
Titel: Datenbank ohne Server
Erstmal ein freundliches HALLO an alle! Ich bin der neue und werd jetzt öfter nerven...
Ich veruche mich gerade in der Welt von C# zurechtzufinden. Hab mal C++/CLI geamcht. Finde mich aber in der PHP Welt besser zurecht...
Jetzt aber mal zur Frage.
Ich habe hier einen SQL Server (Express) stehen und eine kleine Anwendung geschrieben. Diese Anwendung will ich jetzt auf einem anderen Rechner installieren, der nicht auf den Server zugreifen kann/soll. Ohne diesen gleich zum Server machen zu müssen, muss ich das SQL Redistibutable mit installieren. Soweit richtig?
Falls ja, was ist mit meinem ConnectionString. Ist das dann auch "Server=.\\SQLEXPRESS; Database=xy; Trusted_Connection=yes;"? Oder muss ich da was anderes machen?
Wie ihr seht bin ich diesbezüglich etwas ratlos...
Schon mal vielen Dank für eure Hilfe!
Trashkid2000 - Mo 16.05.11 21:08
Hallo und willkommen hier im Forum!
krare hat folgendes geschrieben : |
Ich habe hier einen SQL Server (Express) stehen und eine kleine Anwendung geschrieben. Diese Anwendung will ich jetzt auf einem anderen Rechner installieren, der nicht auf den Server zugreifen kann/soll. Ohne diesen gleich zum Server machen zu müssen, muss ich das SQL Redistibutable mit installieren. Soweit richtig? |
Gute Frage, denke, dass das Paket einfach einen Sql-Server installiert!? Aber so genau weiss ich das nun auch nicht.
krare hat folgendes geschrieben : |
Falls ja, was ist mit meinem ConnectionString. Ist das dann auch "Server=.\\SQLEXPRESS; Database=xy; Trusted_Connection=yes;"? Oder muss ich da was anderes machen? |
Naja, wenn ich einen Sql-Server aufsetze habe ich die Möglichkeit, die Instanz einen Namen zu geben. Standard ist halt "SQLEXPRESS" bei einem Express-Server. Aber ich kann ihn auch umbenennen. Und bei einem "richtigen" Server ist es standardmäßig "SQLSERVER".
Naja, je nach Situation kannst Du Dich nicht auf den ConnectionString verlassen. Und ob auch immer der Name der Datebank gleich ist, ist auch so eine Frage. Also gebe dem Anwender wenigstens die Möglichkeit, den ConnectionString zu modifizieren.
Aber mal was anders: Du schreibst, dass es eine kleine Anwendung ist. Dann realisiere das doch lieber mit einer Compakt-Datenbank (Sql CE, SqLite...). Oder in Form von Dateien (Xml..). Denn ich würde es als Anwender nicht gerade toll finden, wenn ich wegen einer einzelnden, kleinen Anwendung einen Server laufen haben müsste.
LG,
krare - Mo 16.05.11 21:46
Hi,
ich würde ja ne "abgespeckte" Version nehmen. Die Datenbank auf dem Server sollte auch nur zum Testen sein. Und weil ich ja eben nicht möchte, dass jeder der mein Programm nutzen möchte, einen "Server aus seinem PC macht" frag ich mich wie das geht. Über XML hatte ich auch schon nachgedacht. Aber ich weiß nicht ob da die Datenmenge nicht zu groß werden...
Ich frag mich halt wie die anderen das machen. Wenn ich mir ne Freeware aus dem Netz ziehe müssen ja auch Daten weggeschrieben werden. Ich musste aber noch nie nen Server installieren. Läuft das dann immer über XML? Wie geht das denn mit z.B. SQL - Compact? Das simuliert mir doch nen Server oder? Das bedeutet doch ich muss da auch irgendwas mitgeben, damit der Zielrechner das auch nutzen kann.
Mmmmhhh. Irgendwie steh ich grad auf dem Schlauch. Naja. Erstmal Feierabend machen und schlafen gehen. Dann schaun mer mal weiter...
Kha - Mo 16.05.11 22:27
krare hat folgendes geschrieben : |
Das bedeutet doch ich muss da auch irgendwas mitgeben, damit der Zielrechner das auch nutzen kann. |
Nur die Dlls :) .
krare - Di 17.05.11 15:33
Mag jetzt blöd klingen, aber damit habe ich mich noch nie beschäftigt. Wie bekomme ich raus welche dll ich wohin legen muss?
Und was muss ich dann machen um die .mdf einzubinden. Ein Tutorial wäre glaub ich nicht schlecht... Aber ich find kein geeignetes...
krare - Fr 20.05.11 13:29
Irgendwie bin ich zu dämlich. Ich habe jetzt gelernt, dass ich meinem Programm die libmysql.dll mitgebe. OK. Aber wie sag ich meinem Programm, dass es nicht auf einen Server zugreift, sondern diese .dll nutzt? Ich war der Meinung, dass dies über den ConnectionString geschieht. Aber ich kann dazu nix finden. Kann mir da jemand helfen?
Trashkid2000 - Fr 20.05.11 22:04
Hallo,
krare hat folgendes geschrieben : |
Irgendwie bin ich zu dämlich. |
Nicht gleich den Kopf in den Sand stecken, bloß weil etwas nicht gleich auf Anhieb klappt.
Ich frage mich, was Du mit der libmysql.dll willst. Denn diese ist ja für den MySql-Server (auch wenn ich von dieser Bibliothek noch nie was gehört habe, sondern nur von der MySql.Data.dll). Und das setzt also auch ein (MySql-)Server heraus.
Wenn Du einen Provider benutzt, der nicht standardmäßig im Framework enthalten ist, so musst Du auf jeden Fall die dll des Connectors einbinden (schon deshalb, weil C# sonst die Klassen einfach mal nicht kennt). Und diese dann natürlich beim publishen mitreichen.
krare hat folgendes geschrieben : |
Aber wie sag ich meinem Programm, dass es nicht auf einen Server zugreift, sondern diese .dll nutzt? Ich war der Meinung, dass dies über den ConnectionString geschieht. |
Der ConnectionString muss schon zun DB-Provider passen. Und da die erzeugten Objekte ja von der eingebundenen Dll kommen, wird diese natürlich auch benutzt.
Aber Du wolltest doch eigentlich ganz auf einen Server verzichten, und lieber auf eine kompakte Datenkank umsteigen, oder habe ich das falsch gedeutet?
LG
Trashkid2000 - Sa 21.05.11 07:56
Kha hat folgendes geschrieben : |
krare hat folgendes geschrieben : | Das bedeutet doch ich muss da auch irgendwas mitgeben, damit der Zielrechner das auch nutzen kann. | Nur die Dlls :) . |
Bei Sql Compact sind es 7 dll's, die mitgeliefert werden müssen. Die Seite hier beschreibt, welche:
http://msdn.microsoft.com/de-de/library/aa983326(v=VS.90).aspx
LG
jaenicke - Sa 21.05.11 07:59
krare hat folgendes geschrieben : |
Ich habe jetzt gelernt, dass ich meinem Programm die libmysql.dll mitgebe. |
Abgesehen davon, dass die wie der Name schon sagt für MySQL ist, ist diese DLL nicht für .NET gedacht. (Auch wenn du die theoretisch natürlich einbinden kannst.)
krare - Di 24.05.11 13:23
Danke für die Hinweise. Ich bin bei der libmysql.dll davon ausgegangen, dass diese einene MySqlServer simuliert. Ich hatte gelesen, dass man nur diese mitgeben muss und sonst nix. Aber gut. War wohl nix...
Der Link hat mir auf jeden Fall geholfen. Hier das ist allerdings mein Problem:
msdn hat folgendes geschrieben: |
Da sich die SqlServerCe-DLLs im globalen Assemblycache des Entwicklungscomputers befinden, müssen Sie die Anwendung zur Verwendung der DLLs im Ausgabeverzeichnis konfigurieren. |
Ich war der Meinung, dass dies über den ConnectionString geregelt wird. In etwa so:
"Server=SQLSERVER.CE; Data Source=E:\\..."
Scheinbar habe ich da mal wieder was falsch verstanden...
Laut "ConnectionStrings.com" soll das auch "Provider" heißen. Nur bekomme ich dann die Meldung, dass dieses Schlüsselwort nicht unterstützt wird...
Trashkid2000 - Di 24.05.11 20:21
Hallo,
krare hat folgendes geschrieben : |
Laut "ConnectionStrings.com" soll das auch "Provider" heißen. Nur bekomme ich dann die Meldung, dass dieses Schlüsselwort nicht unterstützt wird... |
Also wenn ich mir unter
http://www.connectionstrings.com/sql-server-2005-ce die ConnectionStrings anschaue (jedenfalls für den Namespace "System.Data.SqlServerCe", alos ganz oben auf der Seite) gibt es dort keine Angabe des Providers.
Vielleicht wäre es ganz hilfreich, wenn Du mal posten würdest, wie Du versuchst, auf die Datenbank zuzugreifen. Also direkt mit den Klassen (SqlCeConnection..., ...) oder über einen O/R-Mapper. Poste doch mal ein wenig Code.
LG
krare - Mi 25.05.11 09:37
Hallo,
ich war mal wieder nur zu doof. Hatte die System.Data.SqlClient genutzt statt der System.Data.SqlServerCe. Manchmal ist es zu einfach um den Fehler zu finden :autsch: .
Jetzt mag mein Programm die Datenbank öffnen, kommt aber dann mit einer Fehlermeldung, die ich nicht verstehe (nächstes Problem also :cry: ).
Vielleicht wisst ihr / weist du ja was das heist. Im Netz hab ich noch nicht viel gefunden (hab aber auch noch nicht richtig gesucht...).
Hier die Meldung:
Zitat: |
Der Spaltenname ist ungültig. [ Node name (if any) = ,Column name = test ] |
Konkrete Frage:
Was bedeutet "Node name (if any) = "? Übersetzen kann ich das. Aber ich weiß nicht was ich damit anfangen soll. Wo soll ich suchen? Was für ein Knoten soll das sein?
Gruß
Trashkid2000 - Mi 25.05.11 20:05
Zitat: |
Der Spaltenname ist ungültig. [ Node name (if any) = ,Column name = test ] |
Das deutet ja eigentlich auf ein falsches SQL-Statement hin.
Wie sieht Dein Statement denn aus?
jaenicke - Mi 25.05.11 20:08
Die Meldung heißt für mich, dass eine Spalte test in dem Statement angesprochen wird, aber nicht in der Datenbank gefunden wird.
Das "if any" soll vermutlich heißen, dass "Node name" nur relevant ist, wenn dort etwas stehen würde, und das Interessante in "Column name" steht.
krare - Do 26.05.11 11:51
Hallo Leute,
habs raus. Es läuft jetzt. Nachdem ich den Spaltenname gefühlte 500 mal auf Rechtschreibfehler in der DB und im Programm geprüft und nichts gefunden habe, habe ich die Bezeichnung aus der DB in das Programm kopiert. Jetzt funktionierts. Scheinbar hatte ich es tierisch auf den Augen...
Naja. Auf jeden Fall VIELEN DANK für eure Mühe und Geduld.
Gruß
krare
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!