Autor Beitrag
houly
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Mi 09.11.11 14:53 
Hallo liebe Community,

ich plane derzeit ein Projekt, wo es um eine Software geht, welche
über eine COM Schnittstelle Messwerte eines Gerätes ausliest und speichert/auswertet.
Da eine grafische Auswertung im Programm erfolgen soll, fand ich es für sinnvoll die Daten in einer DB zu speichern.

Leider habe ich mit Datenbanken in C# keine Ahnung, und wollt gerne mal nachfragen was sich für eine lokale Datenbank auf dem Client am besten geeignet?
Wie wird es realisiert und was ich vorallem gar nicht vorstellen kann. Wird eine externe Software verwendet neben den erstellten Programm um die DB zu schreiben/lesen auf dem Client später?


Es wäre super, wenn mir jemand weiterhelfen könnte.

Viele Grüße
Houly
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4798
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Mi 09.11.11 17:12 
Hallo und :welcome:

dann sollte eine "Embedded Database" für dich am besten sein, z.B. SQLCompact oder Firebird Embedded, so daß du nur ein paar DLLs referenzieren mußt.
houly Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: So 13.11.11 02:30 
Danke erst einmal für die schnelle Antwort.
Ich habe mir die Microsoft SQL Server Compact 4.0 mal heruntergeladen.

Wenn ich dann dort eine neue Datenquelle hinzufüge (Compact 3.5) und in mein Projekt integrieren möchte über das Wizard, bekomme ich immer den Fehler:

user defined image

Hat es etwas damit zutuen, wenn man mehrere VS Versionen installiert hat?
Ich habe VS 2008 SP1 und VS 2010 drauf.

Ich würde alles noch einmal re-installen, aber ein Studio weglassen.
Meine Frage wäre, ob es sinnvoll ist das 2010er Studio, statt den 2008er zu benutzen, hinsichtlich meines Projektes?

Gruß
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4798
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: So 13.11.11 10:12 
Hallo,

eine konkrete Antwort habe ich leider nicht, jedoch sollte es nicht mit den verschiedenen VS-Versionen zu tun haben (du kannst also beide bei dir installiert lassen).

Irritieren tut mich nur "Compact 4.0" gegenüber "3.5".

Auf der Download-Seite von MS zu SQL Server Compact steht noch:
Zitat:

.NET Framework 3.5 SP1 oder .NET Framework 4 ist für die verwaltete Anwendungsentwicklung erforderlich.

Du mußt also unter VS 2008 dein Projekt auf ".NET 3.5" stellen (sowie extern das SP1 installiert haben: Microsoft .NET Framework 3.5 Service Pack 1) oder aber am besten du probierst es auch mal mit einem VS 2010 Projekt (und dann entweder auch .NET 3.5 oder gleich .NET 4.0 für dein Projekt auswählen).

Alternativ eine ältere Version vom SQL Compact runterladen und verwenden (z.B. die Microsoft SQL Server Compact 3.5 Service Pack 2 für Windows Desktop ).
Schau dir vor der Installation immer die "Systemanforderungen" genau an.

Viel Erfolg noch.
houly Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: So 13.11.11 17:31 
Also das .NET Framework 3.5 SP1 lässt sich nicht installieren. Beim starten des Installer passiert nachd en Extract nix mehr.
Ich habe mein Projekt mal im VS 2010 geladen udn dort funktioniert das mit der DB.

Nach Anlegen eines Testprojektes um das Schreiben/Lesen der DB mal zu testen, häng ich schon an einen einfach Test fest :(

Er bringt mir immer den Fehler:
Fehler beim Analysieren der Abfrage. [ Token line number = 1,Token line offset = 36,Token in error = Alter ]

Mein Code:

ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlServerCe;

namespace DB_Test
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {

                SqlCeConnection conn = new SqlCeConnection("Data Source = patient.sdf;");
                conn.Open();

                SqlCeCommand command = conn.CreateCommand();

                command.CommandText = "INSERT INTO Patient(Vorname, Name, Alter) VALUES (@vname, @nam, @alte)";

                SqlCeParameter param = null;

                param = new SqlCeParameter("@vname", SqlDbType.NVarChar, 200);
                command.Parameters.Add(param);

                param = new SqlCeParameter("@nam", SqlDbType.NVarChar, 200);
                command.Parameters.Add(param);

                param = new SqlCeParameter("@alte", SqlDbType.Int, 4);
                command.Parameters.Add(param);

                command.Prepare();

                command.ExecuteNonQuery();

                command.Parameters[0].Value = textBox1.Text;
                command.Parameters[1].Value = textBox2.Text;
                command.Parameters[2].Value = textBox3.Text;

                command.ExecuteNonQuery();
                

        }
    }
}


Weiß jemand wo der Fehler liegt?
Trashkid2000
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 561
Erhaltene Danke: 137



BeitragVerfasst: So 13.11.11 21:11 
Alter ist unter SQL ein reserviertes Wort (ALTER TABLE...). Da liegt der Fehler, der aber in diesem Fall nicht offensichtlich ist.
Hier mal eine Übersicht in der MSDN;: msdn.microsoft.com/d...73340(v=SQL.90).aspx
Also entweder die Spalte in der Datenbank umbenennen und Query anpassen (ist das sauberste), oder den Spaltennamen maskieren:
ausblenden SQL-Anweisung
1:
INSERT INTO Patient(Vorname, Name, [Alter])...