Zum Inhalt springen
  • 0

c# InvalidCastException


Tician

Frage

Moin moin ich wieder^^

Ich habe ein Programm das Daten in eine Datenbank schreibt, aber sobald ich die Tabelle in der ich die Datenbank veranschauliche erneuer funktioniert es nicht mehr und ich bekomme einige Exceptions.

Code:

using System.Windows.Forms;
using System.IO;
using System.Text.RegularExpressions;
using MySql.Data.MySqlClient;
using System.Data;
using System;

namespace Message_Admin
{
    public partial class Form1 : Form
    {
        //allgemein
        MySqlConnection connection;
        MySqlDataAdapter adapter;
        string command = "";
        MySqlCommand sqlcommand;

        //ini-Inhalt
        string iniText;
        string iniServer;
        string iniDatabase;
        string iniUser;
        string iniPassword;
        string iniPort;
        string iniTable;

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                ReadIniFile();

                //SQL Zeug
                string connectionString = "SERVER=" + iniServer + ";" +
                    "DATABASE=" + iniDatabase + ";" +
                    "UID=" + iniUser + ";" +
                    "PASSWORD=" + iniPassword + ";" +
                    "Port=" + iniPort + ";";
                string command = "SELECT * FROM " + iniTable + ";";
                connection = new MySqlConnection(connectionString);
                connection.Open();

                adapter = new MySqlDataAdapter(command, connection);
                DataSet ds = new DataSet();
                adapter.Fill(ds);

                dataGridView1.DataSource = ds.Tables[0];

                //add CheckBox Column
                DataGridViewCheckBoxColumn chk = new DataGridViewCheckBoxColumn();
                dataGridView1.Columns.Add(chk);
                chk.HeaderText = "Choose";
                chk.Name = "chk";
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        public void ReadIniFile()
        {
            try
            {
                //ini lesen
                iniText = File.ReadAllText("settings.ini");

                //Werte auslesen
                Regex regServer = new Regex("(?<=Server\\=).+");
                Regex regDatabase = new Regex("(?<=Database\\=).+");
                Regex regUID = new Regex("(?<=UID\\=).+");
                Regex regPassword = new Regex("(?<=Password\\=).+");
                Regex regPort = new Regex("(?<=Port\\=).+");
                Regex regMainTable = new Regex("(?<=MainTable\\=).+");

                Match matchServer = regServer.Match(iniText);
                Match matchDatabase = regDatabase.Match(iniText);
                Match matchUID = regUID.Match(iniText);
                Match matchPassword = regPassword.Match(iniText);
                Match matchPort = regPort.Match(iniText);
                Match matchMainTable = regMainTable.Match(iniText);

                iniServer = Convert.ToString(matchServer);
                iniDatabase = Convert.ToString(matchDatabase);
                iniUser = Convert.ToString(matchUID);
                iniPassword = Convert.ToString(matchPassword);
                iniPort = Convert.ToString(matchPort);
                iniTable = Convert.ToString(matchMainTable);
            }
            catch
            {
                MessageBox.Show("Initialisierung der ini-Datei fehlgeschlagen");
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            sqlcommand = new MySqlCommand(command, connection);
            string textbox = richTextBox1.Text;

            foreach (DataGridViewRow row in dataGridView1.Rows)
            {
                try
                {
                    if (Convert.ToBoolean(row.Cells[5].Value) == true)
                    {
                        sqlcommand.CommandText = "update " + iniTable + " set message = '" + textbox + "' where id = " + row.Cells[0].Value + ";";
                        sqlcommand.ExecuteNonQuery();                      
                    }
                    else if (row.Cells[5].Value == null)
                    {

                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }
            richTextBox1.Clear();
        }
    }
}

Kurz erklärt: Das Programm ließt ein paar Daten aus einer ini-Datei um sich zur mysql-db zu verbinden. Mit Button 1 wird die Tabelle der Datenbank in das DataGridView eingelesen und ich habe auch noch eine weitere Reihe (row[5]) hinzugefügt die check-Boxen enthält. Soweit funktioniert es auch ohne Probleme.

Wenn ich jetzt aber Button2 ausgeführt habe, dann Button1 klicke um das DataGrid zu aktualisieren und erneut Button2 ausführe bekomme ich eine Exception hier:

if (Convert.ToBoolean(row.Cells[5].Value) == true)

System.InvalidCastException "Ein Objekt kann nicht von DBnull in andere Typen umgewandelt werden"

Dann folgen noch einige andere SQL-Exceptions die wohl einfach nur daraus resultieren.

Ich weiß nicht auf welche Variable ich achten muss oder wie man die Checkboxen die gecheckt sind noch afragen könnte außer es in boolean umzuwandeln (das hatte ich auf Stack Overflow gefunden)

Kann das jemand nachvollziehen oder mir einen Hinweis geben was ich da falsch mache?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Empfohlene Beiträge

  • 0

Huch das artet ja aus hier.

Also, ich habe mir Head First C# geholt (bzw holen lassen), extra mit viel veranschaulichung. Das Buch hat auch über 1000 Seiten, ist englisch, aber dafür ausgelegt den Leser am Ball zu halten. Ich wusste allerdings nichts das es hauptsächlich auf Windows 8 ausgelegt ist und da ein neues Programm als "windows app" erstellt wird, während ich nur Windows Forms oder WPF-anwendung zur Auswahl habe... erstmal lesen was der Unterschied ist und welches Projekt dem neuen "windows app" entspricht... mal schauen wie viel "wie schreibe ich ordentlichen Code" darin enthalten ist :)

Ich würde mich vertrauensvoll nochmal an euch wenden wenn ich irgendwo hängen bleibe^^

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • -1
vor 12 Stunden schrieb Fauch:

Jo, Code Complete hat ja auch nur etwa 750 Seiten + Anhänge. 

dafür schneidet es die meisten Grundlagen gut an. Irgendwie muss man sich ein Fundament schaffen.

vor 12 Stunden schrieb Fauch:

Die TE ist FiSi und hat von Programmieren nicht wahnsinnig viel Ahnung.

Und das ist eine Lizenz zum pfuschen?

vor 12 Stunden schrieb Fauch:

Da mit Code Complete, Clean Coding und Design Patterns anzukommen (zum Einstieg!) ist Quark.

Clean Code und Design Patterns halte ich am Anfang für falsch. Beides kann man dann noch nicht einordnen. Code Complete halte ich wenn man keinen Ausbilder hat der einem vernünftig programmieren beibringen kann fast für alternativlos. Ganz am Anfang wäre "Implementation Patterns" von Kent Beck auch noch sinnvoll und eine etwas knappere Einführung in die Grundlagen. Reicht für die OP vielleicht schon aus. Und wenn sie dann Blut geleckt hat kann sie immer noch Code Complete durcharbeiten.

Wie soll man denn deiner Meinung nach Einsteigen? Den Unterschied zwischen If-Schleifen und For-While-Unterscheidungen lernt man durch Tutorial oder Spracheinführungsbücher innerhalb weniger Tage. Aber wie soll man deiner Meinung nach lernen wie man ein Stück Software baut wenn man eben keinen Ausbilder im Betrieb hat der einen (evtl. an Hand einer bestehenden Software) Stück für Stück daran heranführen kann?

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • -1
vor einer Stunde schrieb afo:

dafür schneidet es die meisten Grundlagen gut an. Irgendwie muss man sich ein Fundament schaffen.

Und das ist eine Lizenz zum pfuschen?

Clean Code und Design Patterns halte ich am Anfang für falsch. Beides kann man dann noch nicht einordnen. Code Complete halte ich wenn man keinen Ausbilder hat der einem vernünftig programmieren beibringen kann fast für alternativlos. Ganz am Anfang wäre "Implementation Patterns" von Kent Beck auch noch sinnvoll und eine etwas knappere Einführung in die Grundlagen. Reicht für die OP vielleicht schon aus. Und wenn sie dann Blut geleckt hat kann sie immer noch Code Complete durcharbeiten.

Wie soll man denn deiner Meinung nach Einsteigen? Den Unterschied zwischen If-Schleifen und For-While-Unterscheidungen lernt man durch Tutorial oder Spracheinführungsbücher innerhalb weniger Tage. Aber wie soll man deiner Meinung nach lernen wie man ein Stück Software baut wenn man eben keinen Ausbilder im Betrieb hat der einen (evtl. an Hand einer bestehenden Software) Stück für Stück daran heranführen kann?

Wie soll man einsteigen?

Die Frage beantwortest du doch selber - mit Spracheinführungsbüchern. Bevor der TE nicht weiß, was Objektorientierung überhaupt ist, warum man Dinge sinnigerweise in Klassen anordnet, wie Vererbung funktioniert (und noch ca. zig weitere Sachen) macht es aus meiner Sicht nicht viel Sinn sich mit Codestrukturierungsbüchern wie Code Complete abzugeben.

Denn alle angesprochenen Konzepte setzt Code Complete bereits voraus. Der TE muss sich doch erst einmal eine vernünftige Grundlage schaffen, bevor sie sich mit Softwarearchitektur auseinandersetzen kann.

Das Grundproblem an der Stelle ist, wie viele Andere ja auch erwähnt haben, dass sich die TE zuviel auf einmal vornimmt. Allein in dem vorhandenen Code sehe ich x Stellen an denen komplexe Probleme auftreten, die man eben nicht mal so nebenher aus einem Tutorial lernt.

Code Complete ist aus meiner Sicht ein Buch für fortgeschrittene Programmierer. Natürlich kann man argumentieren, dass man mit Dingen wie CC nie früh genug anfangen kann. Ich schätze aber den TE nicht auch nur annähernd für fit genug ein, da in naher Zukunft irgendwelche Erfolgserlebnisse (und die sind wichtig beim Lernen) abzuleiten.

 

 

 

Bearbeitet von Fauch
Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Diese Frage beantworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...