Autor Beitrag
Luka
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 22



BeitragVerfasst: Mo 28.09.09 17:47 
Hi,

Ich habe mir heute zum ersten Mal C# angesehen. Ich programmiere normalerweise Webanwendungen mit PHP, moechte nun aber einmal eine Anwendung in C# erstellen. Ich muss sagen, dass mich dieser Tag bereits ziemlich erschlagen hat, der Unterschied zu PHP scheint riesig zu sein. Okay, dies diente nur als Vorwarnung, falls meine Fragen zu billig sind, verzeiht das bitte.

Ok, nun zu meinem Problem. Ich habe mir Visual C# 2008 Express Edition runtergeladen. Dann habe ich ein project erstellt(WindowsForm) und als naechstes eine sdf Datenbank.

Ich wollte nun nach Abschicken des Formulars die Daten in meine DB eintragen. Habe hier im Forum den folgenden Part dafuer gefunden:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
SqlConnection sql_con = new SqlConnection();
            SqlCommand sql_cmd;
            sql_con.ConnectionString ="Data Source=|DataDirectory|\\testdb.sdf";
            sql_con.Open();
            sql_cmd = new SqlCommand("INSERT INTO projects ('id',projectname') VALUES (1,'Testproject1')", sql_con);
            sql_con.Close();

Oben habe ich dann noch die beiden Sachen eingebunden (Namespaces?)

ausblenden C#-Quelltext
1:
2:
using System.Data.SqlClient;
using System.Data.SqlServerCe;


Ich bekomme nun aber die folgende Fehlermeldung:

Zitat:
A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: SQL Network Interfaces, error: 26 - Error Locating Server/Instance Specified)


Ich bin bereits quer durchs www gesurft, aber eine Loesung habe ich immer noch nicht gefunden. Hat jemand eine Idee wo der Fehler liegt? Ich bin wirklich ueber jeden Tipp dankbar, nicht das dieser Tag am Ende noch voellig umsonst war. Vielen Dank im Voraus.

Gruss, Luka


Zuletzt bearbeitet von Luka am Mo 28.09.09 20:26, insgesamt 1-mal bearbeitet
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Mo 28.09.09 20:21 
Hallo und :welcome:

sdf gehört zur Compact-Version, oder? Dann darfst du nicht die Sql-Klassen aus dem SqlClient-Namespace verwenden, sondern musst stattdessen die entsprechenden SqlCe-Klassen benutzen. (Die Details stimmen weitestgehend überein.)

Beim INSERT-Befehl hast du außerdem Hochkommata falsch gesetzt: Spaltennamen werden in der Regel ohne sie angegeben, String-Feldinhalte mit. Aber die Stringinhalte sollten möglichst immer nicht in den SQL-String direkt eingetragen werden, sondern per Parameter; siehe dazu [Artikelserie] Parameter von SQL Befehlen.

Außerdem fehlt bei deinem Code noch das Ausführen des Befehls mit ExecuteNonQuery.

Allgemeine Einführung in die DB-Bearbeitung mit C# siehe z.B. OpenBook VC# oder Datenbanken How-To.

Gruß Jürgen

PS. Code ist entsprechend zu markieren; das kannst du auch nachträglich ändern: den Button mit der Schere anklicken, Textbereich markieren, "Bereiche" öffnen, C# auswählen, Plus-Button, Absenden.

PS 2. Dieses Geld Gelb macht den Text schlecht lesbar. Fehlermeldungen können besser als Zitat markiert werden. Woran habe ich bloß bei diesem Schreibfehler gedacht...


Zuletzt bearbeitet von JüTho am Di 29.09.09 09:13, insgesamt 1-mal bearbeitet
Luka Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 22



BeitragVerfasst: Mo 28.09.09 20:35 
Hi JüTho,

Erstmal vielen Dank für Deine Antwort. Ich habe den Post jetzt editiert, jetzt kann man es auch besser lesen.

Nun zu deiner Antwort, da habe ich dann ja wohl einige Fehler im Code. Ich muss ehrlich sagen das mir die unterschiedlichen Datenbanken noch nicht ganz klar sind.
Ich möchte am Ende ein Programm entwickeln, dass lokal laufen soll. Das Ganze soll jedoch auf dem PC eines Kollegen laufen, muss also leicht zu transportieren sein. Schön wäre es auch, wenn man die DB leicht sichern könnte. Welche DB würdet Ihr mir dann empfehlen? Ich möchte da nichts grosses installieren müssen am Ende. Ist sdf dann das richtige?

Du hast auch geschrieben, das ich die "SqlCe-Klassen" benutzen muss. Ich habe oben ja
ausblenden C#-Quelltext
1:
using System.Data.SqlServerCe;					

reicht das nicht oder gibt es da noch eine andere Klasse?

Gruss Luka
Luka Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 22



BeitragVerfasst: Mo 28.09.09 22:07 
So, ich nochmal. Ich habe mir Deinen 2. Link mal angeschaut, der hat mir auch weitergeholfen. Vielen Dank. Mein Sourcecode sieht nun so aus:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
string connstr = "Data Source='testdb.sdf';Default Lock Timeout=60000";
SqlCeConnection conn = new SqlCeConnection(connstr);
           
SqlCeCommand cmd = new SqlCeCommand("INSERT INTO projects(id, projectname)VALUES(3,'testproject3')", conn);
int anzahl = 0;

try
{
   conn.Open();
   anzahl = cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
   MessageBox.Show("Es ist ein Fehler aufgetreten : " + ex.Message);
}
conn.Close();
MessageBox.Show("Message : " + anzahl);


Die Fehlermeldung ist nun verschwunden. Als Anzahl wird 1 ausgegeben, leider wird jedoch nichts in die DB eingetragen. Sieht jemand den Fehler?
Ich muss doch kurz vor der Lösung sein...
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Mo 28.09.09 23:42 
Könntest du vielleicht darauf hereingefallen sein ;) ?

_________________
>λ=
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Di 29.09.09 09:12 
Hallo,

user profile iconLuka hat folgendes geschrieben Zum zitierten Posting springen:
Du hast auch geschrieben, das ich die "SqlCe-Klassen" benutzen muss. Ich habe oben ja
ausblenden C#-Quelltext
1:
using System.Data.SqlServerCe;					

reicht das nicht oder gibt es da noch eine andere Klasse?

Die using-Direktive hat grundsätzlich nichts mit dem eigentlichen Programmcode zu tun. Wichtig sind die Klassen, wobei der vollständige Name relevant ist. Eine deiner Klasse heißt genau:
ausblenden C#-Quelltext
1:
System.Data.SqlServerCe.SqlCeCommand					

Programmierer sind aber schreibfaul und wollen nicht an jeder Stelle den vollständigen Namen schreiben; das würde den Quelltext außerdem aufblähen und die Lesbarkeit erschweren. Deswegen verkürzt man das Ganze, indem der Namespace - nämlich alles vor dem letzten Punkt - in der using-Direktive genannt wird. Mit der using-Direktive bekommt der Compiler die Information, wo und wie die benutzte Klasse definiert ist. Genauer: In den Referenzen stehen die DLLs mit den Definitionen; dort werden die Namespaces genannt; auf diese wird mit using Bezug genommen.

Der vollständige Name ist nur noch dann erforderlich, wenn man zwei Klassen benutzt, die den gleichen (Kurz-) Namen in verschiedenen Namespaces haben.

Zitat:
leider wird jedoch nichts in die DB eingetragen. Sieht jemand den Fehler?

Dazu habe ich dieselbe Vermutung wie Sebastian.

Gruß Jürgen
Luka Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 22



BeitragVerfasst: Di 29.09.09 11:31 
Moin zusammen,

Erstmal vielen Dank fuer Eure Hilfe. Ich habe mein erstes Script jetzt tatsaechlich zum Laufen gebracht. Eure Vermutung war richtig, das Ganze wurde in die Bin DB geschrieben. gehoert das denn so oder kann ich das irgendwo aendern? Schoener waere es ja, wenn die DB auch im Projectordner geaendert werden wuerde, da ich diese ja auch offen habe im DB-Explorer.

Puh, das ist wirklich kompliziert.

Gruss, Luka
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Di 29.09.09 12:40 
Nein, du musst aufpassen, welche Datei wo gespeichert ist. Die EXE und DLLs werden beim Compilieren immer in den Ausgabe-Ordner geschrieben. Wenn die Datenbank im Projekt-Explorer steht, musst du einstellen, wann sie ebenfalls in den Ausgabe-Ordner kopiert werden soll - nämlich normalerweise nicht.

Es ist, glaube ich, nicht gut, aus der IDE heraus die DB zu ändern (wieso geht das überhaupt?).

Jürgen

PS. Was meinst du mit "Bin DB"? Binär ist doch sowieso alles.
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Di 29.09.09 13:31 
user profile iconLuka hat folgendes geschrieben Zum zitierten Posting springen:
gehoert das denn so oder kann ich das irgendwo aendern? Schoener waere es ja, wenn die DB auch im Projectordner geaendert werden wuerde, da ich diese ja auch offen habe im DB-Explorer.
es sollte dich niemand daran hindern, auch die DB im bin-Ordner über "Datei -> Öffnen" zu öffnen ;) . Die im Projektverzeichnis musst du allerdings auf "Copy if newer" stellen, damit sie nicht ihre Debug-Variante überschreibt.

user profile iconJüTho hat folgendes geschrieben Zum zitierten Posting springen:
Es ist, glaube ich, nicht gut, aus der IDE heraus die DB zu ändern (wieso geht das überhaupt?).
Naja, für gewöhnliche DBs bietet VS ebenfalls ein halbes Management Studio.

user profile iconJüTho hat folgendes geschrieben Zum zitierten Posting springen:
PS. Was meinst du mit "Bin DB"? Binär ist doch sowieso alles.
Ich musste auch etwas rätseln, aber es war wohl "die DB im bin-Ordner" gemeint ;) .

_________________
>λ=
Luka Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 22



BeitragVerfasst: Di 29.09.09 17:10 
Hi,

Sorry dass ich mich so ungenau ausgedrueckt habe, mit Bin DB meinte ich tatsaechlich die Datenbank im "bin" Ordner. Das Ganze ist momentan halt noch sehr verwirrend, mit 2 Datenbanken.
Na ja, bis zur Fertigstellung meines Projektes werde ich das wohl hoffentlich alles durchschaut haben. Ich bin nur einfach schonmal froh, dass ich mittlerweile in die Datenbank schreiben kann. Als naechste Herausforderung werde ich mir dann das Auslesen von Daten anschauen muessen. (Dropdown mit Daten aus DB auffuellen)

Ich sage nochmal vielen Dank fuer Eure Hilfe, ohne Euch waere ich an meinem zweiten C# Tag nicht schon soweit.

Gruss Luka