Jump to content

mySQL mit C# klappt nicht


Recommended Posts

Hallo zusammen,

ich habe heute ein bisschen mit C# rumgespielt,

wollte ein kleines Programm schreiben was daten

von einem Temperatur Sensor in die Datenbank schreibt.

Bis jetzt ist es mir nicht gelungen.

Werte werden schonmal in der Konsole ausgegeben und auf

ein Text wird auf dem LCD display angezeigt.

Vieleicht könnt Ihr mir Helfen.

 

mfg

Sascha

 

using Tinkerforge;
using MySql.Data.MySqlClient;


class Example
{
    private static string HOST = "localhost";
    private static int PORT = 4223;
    private static string UID = "9p19cLeYP8w"; // Change to your UID
    private static string UID2 = "b4A"; // Change to your UID
    private static string UID4 = "9LY"; // Change to your UID

  

    static void Main()
    {
        IPConnection ipcon = new IPConnection(HOST, PORT); // Create connection to brickd
        BrickMaster master = new BrickMaster(UID); // Create device object
        BrickletTemperature temp = new BrickletTemperature(UID2); // Create device object
        BrickletLCD20x4 lcd = new BrickletLCD20x4(UID4); // Create device object

        ipcon.AddDevice(lcd); // Add device to IP connection
        ipcon.AddDevice(master); // Add device to IP connection
        ipcon.AddDevice(temp); // Add device to IP connection
        // Don't use device before it is added to a connection

        
        
        for (int i = 1; i <= 5; i++)
           
        {
        // Get voltage and current from stack (in mV/mA)
        ushort voltage = master.GetStackVoltage();
        ushort current = master.GetStackCurrent();
        short temperature = temp.GetTemperature();

        lcd.BacklightOn();
        lcd.ClearDisplay();
        lcd.WriteLine(0, 0, "Test");
        System.Console.WriteLine("## TinkerForge (c) SK");
        System.Console.WriteLine("## Projekt Temperatur + MySQL Datenbank");
        System.Console.WriteLine("Stack Voltage: " + voltage / 1000.0 + " V");
        System.Console.WriteLine("Stack Current: " + current / 1000.0 + " A");
        System.Console.WriteLine("Temperature: " + temperature / 100.0 + " °C");
        System.Threading.Thread.Sleep(500);
        System.Console.Clear();

    public void InsertRow(string myConnectionString) 
   {
    // If the connection string is empty, use a default.
    if(myConnectionString == "") 
    {
        myConnectionString = "DATABASE=wetter;Data SERVER=localhost;
                              UID=xxxxxxx; PASSWORD=xxxxxxxxxxxxxxx";
    }

    MySqlConnection myConnection = new MySqlConnection(myConnectionString);
    string myInsertQuery = "INSERT INTO wetter (sensor1, sensor2) 
                            Values(testwert1, testwert2)";
    MySqlCommand myCommand = new MySqlCommand(myInsertQuery);
    myCommand.Connection = myConnection;
    myConnection.Open();
    myCommand.ExecuteNonQuery();
    myCommand.Connection.Close();
   }
    }
        
        System.Console.WriteLine("Press key to exit");
        System.Console.ReadKey();
        ipcon.Destroy();
            
    }


}

Link to comment
Share on other sites

Definierst du die Funktion InsertRow mitten IN der main-funktion?

Das sieht komisch aus und ich wäre erstaunt, wenn das kompiliert... aber gut.

 

Auf jeden Fall scheinst du diese methode niemals aufzurufen, liegt es daran? Ansonsten: Kommen Fehler? Oder läuft alles stumm durch?

Link to comment
Share on other sites

Hmmh, zumindest in Delphi gibt es die Möglichkeit verschachtelter Routinen (natürlich mit eingeschr. Gültigkeitsbereich). Möglich daß das seine Intension war, die InsertRow in die Main einzubetten. Allerdings bin ich mir nicht sicher ob sowas auch C# zulässt !?

Den Aufruf von InsertRow habe ich auch nicht gefunden, kann aber auch immer öfters an meinen Augen liegen... ;D

 

PS: Zumindest für den 13.08 ist hiermit ein Posting im Forum gesichert ;D

 

PSS:

ipcon.AddDevice(master); // Add device to IP connection

Wozu soll der gut sein ? i.d.R. braucht man den Master-Brick in der Anwendung nicht.

Link to comment
Share on other sites

Danke für eure antworten.

Mit welcher Programmier sprache ist die anbindung an einer mySQL einfacher (ausser PHP)?

Es soll eine anwendung sein die auf meinem Windows Server läuft,

es sollen ja noch weitere Sensoren angeschlossen werden.

In PHP habe ich das ganze hinbekommen, aber C# ist komplett neu für mich.

Werde mal mich in anderen Sprachen einlesen ob da die anbindung besser klappt.

 

mfg

Sascha

 

 

Link to comment
Share on other sites

Also erstmal steht auch noch die Frage im Raum ob der Code den du gezeigt hast ausführbar ist, es sieht nämlich nach einem kleinen Fehler aus (Vermutung: Funktion InsertRow mal außerhalb der Main-methode definieren und nur innerhalb der main rufen, dann klappts).

 

Ansonsten ist wohl keine Sprache dafür von sich aus besser geeignet.

C# ist schon ziemlich gut, weil du mit Visual Studio ein ziemlich gutes Entwicklungs-Werkzeug zur Verfügung hast (meine Meinung). Gut erlernbar wäre denke ich Python.

 

Aus dem Bauch heraus würde ich sagen bleib einfach bei C#, wenn jede andere Sprache (außer PHP) ebenso Einarbeitung für dich bedeutet (Ansonsten nimm eine Sprache die dir vertraut ist). PHP würde ich tatsächlich nur im Webserver-Umfeld nutzen.

Link to comment
Share on other sites

Der Code wird ausgeführt,

er zeigt in der Konsole auch den Temperatur Wert und die Werte vom

Maste Brick an.

Habe aber gerade gesehen das er mir zu der mySQL funktion auch fehler ausgepuckt hatte, die ich anscheinend ignoriert hatte  :-\

 

Was ich halt "nur"  ;D brauche ist ein Programm/Script was

im Hintergrund läuft und mir die Werte in eine DB schreibt,

es sollen nich mehr Sensoren angeschlossen werden.

Das auslesen wird alles in PHP gemacht.

 

Werde mich mit dem Thema C# noch weiter einlesen, mal sehen ob ich ein Buch finde.

 

Trozdem Danke erstmal.

 

mfg

Sascha

Link to comment
Share on other sites

  • 1 month later...

So habe heute nach langer Zeit mich wieder mit dem dem Thema C# und mySQL

beschäftigt, es funktioniert das er in die Datenbank schreibt,

aber er schreibt noch nicht die richtigen werte.

 

"INSERT into wetter (sensor1, sensor2) values ('voltage','temperature')";

Hier schreibt er das Wort: "voltage" und "temperature" in die Datenbank,

irgendwie bekomme ich ihn nicht dazu den richtigen wert zu nehmen, hat jemand eine Idee?

 

Hier der Komplette Code:

using Tinkerforge;
using MySql.Data;
using MySql.Data.MySqlClient;
using System;
using System.Data;


class Example
{
    private static string myConnectionString = "SERVER=localhost;" +
                            "DATABASE=wetter;" +
                            "UID=xxxx;" +
                            "PASSWORD=xxxxxxx;";
    

    private static string HOST = "localhost"; // Am Server abgeschlossen ist
    private static int PORT = 4223;
    private static string UID_00 = "xxxxxxxxxxx"; // Change to your UID
    private static string UID_01 = "xxx"; // Change to your UID
    private static string UID_02 = "xxx"; // Change to your UID
    private static DateTime thisDate = DateTime.Now;

   

    static void Main()
    {
       

        IPConnection ipcon = new IPConnection(HOST, PORT); // Create connection to brickd
        BrickMaster master = new BrickMaster(UID_00); // Create device object
        BrickletTemperature temp = new BrickletTemperature(UID_01); // Create device object
        BrickletLCD20x4 lcd = new BrickletLCD20x4(UID_02); // Create device object

         ipcon.AddDevice(lcd); // Add device to IP connection
        ipcon.AddDevice(master); // Add device to IP connection
        ipcon.AddDevice(temp); // Add device to IP connection
        // Don't use device before it is added to a connection

        
        
        //for (int i = 1; i <= 1000; i++)
          while( true )  
        {
        // Get voltage and current from stack (in mV/mA)
        ushort voltage = master.GetStackVoltage();
        ushort current = master.GetStackCurrent();
        short temperature = temp.GetTemperature();

        lcd.BacklightOn();
        lcd.ClearDisplay();
        lcd.WriteLine(0, 0, "Tinkerforge");
        // lcd.WriteLine(1, 0, "{0:d}", thisDate);
        lcd.WriteLine(2, 0, "Temperatur " + temperature /100.0 + " C");
        System.Console.Clear();
        // System.Console.WriteLine(("").PadRight(38, '#'));
        System.Console.WriteLine("## TinkerForge Temperatur Projekt ## \n");
        System.Console.WriteLine("Stack Voltage: " + voltage / 1000.0 + " V \n");
        System.Console.WriteLine("Stack Current: " + current / 1000.0 + " A \n");
        System.Console.WriteLine("Temperature: " + temperature / 100.0 + " ∞C \n");
        System.Console.WriteLine("Datum: {0:d} \n", thisDate);
        System.Console.WriteLine("Zeit: {0:t} \n", thisDate);

        MySqlConnection connection = new MySqlConnection(myConnectionString);
        MySqlCommand command = connection.CreateCommand(); ;
        command.CommandText = "INSERT into wetter (sensor1, sensor2) values ('voltage','temperature')"; // Daten werden in Datenbank geschrieben mit Auto ID

        MySqlDataReader Reader;
        connection.Open();
        Reader = command.ExecuteReader();

        System.Threading.Thread.Sleep(2500); // Wert wird später hochgesetzt


    }
            
    }
    
}

 

mfg

Sascha

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...