C#.Net Access Datenbank verwenden

Blackhawk50000

Erfahrenes Mitglied
Hallöchen, ich habe vor etwas einen 1/4 Jahr ein kleines Spiel geschrieben, und habe nun heute die Idee gehabt, das man das ganze nur mit einer Highscoreliste in einer Accessdatebank ergänzen kann.
DATENBANK Strunktur:

Tabellenname: HighscoreTabelle
Felder/Typ: ID/Sprimärschlüssen, Zeit/DateTime, Gewonnen/bool, Versuche/int, test/text

nun bin ich in c# bereits so weit gekommen....

Code:
OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\Programme\DPS-GmbH\Zahlenraten\Highscores\Highscores.mdb");
            string strSQL = "SELECT * FROM HighscoreTabelle";
            DataSet ds = new DataSet();
            OleDbCommand cmd = new OleDbCommand(strSQL, con);
            con.Open();
            cmd.CommandText = "INSERT into HighscoreTabelle(id, zeit, gewonnen, versuche, test)values (\"\", \"\", \"\", \"\""+tb_Schlüssel.Text+");";
            cmd.ExecuteNonQuery();

hier will ich grade einen text aus ner textbox in das textfeld schreiben um zu sehen ob es auch in der Db ankommt... aber Pustekuchen.
Bitte helft mir wie schreibe ich korrekt in eine Datenabnk von MS Access?
 
Kannst du denn schon aus der Tabelle lesen bzw. steht die Verbindung? Bekommst du eine Fehlermeldung?

Du solltest dich in dem Zusammenhang auch mal mit DbParameter - oder in deinem Fall der System.Data.OleDb.OleDbParameter - beschäftigen. Die Daten da reinzufummeln ist nicht die feine Art. Einem Command-Objekt kannst du diese Parameter dann hinzufügen ->

cmd.Parameters.Add(new OleDbParamter("paramName1", value1)
cmd.Parameters.Add(new OleDbParamter("paramName2", value2)

Die Query dahinter schaut dann ungefähr so aus:

Insert into Tab (feld1, feld2) values (@paramName1, @paramName2)

Beim ausführen werden dann hier die richtigen Werte "eingesetzt" - verhindert unter anderem auch SqlInjection

Spannend für dich könnte hier auch der OleDbDataAdapter sein. Dem kannst du den Connectionstring und ein Select-Statement übergeben. Wenn du ohne Joins auskommst ist der in der Lage dir dann quasi automatisch ein Update, Insert und Delete-Command zur Verfügung zu stellen.

Das wäre hier an der Stelle denke ich die sauberste und schnellste Lösung.

Such doch einfach mal in der MSDN - wenn du nicht weiterkommst, einfach nochmal nachfragen.
 
nein, Die Tabelle ist komplett leer, da sie jat durch das spielen befüllt werden soll...
und ja ich bekomme zur laufzeit einen fehler der mir sagt, dass mein CommandTest falsch ist

Danke für die super Antwort, doch tut sich nun die frage auf,
cmd.Parameters.Add(new OleDbParamter("paramName1", value1)
cmd.Parameters.Add(new OleDbParamter("paramName2", value2)
wie fülle ich value?

Code:
cmd.Parameters.Add("id", 5);
            cmd.Parameters.Add("Zeit", DateTime.Now);
            cmd.Parameters.Add("Gewonnen", true);
            cmd.Parameters.Add("Versuche", 5);

so ist es denke ich mal total falsch

und so
Code:
cmd.Parameters.Add("Test", OleDbType.Char........./*irgendwas noch dazu*/);
ist es sicher auch nicht ganz richtig....
 
Zuletzt bearbeitet:
Ohne Gewähr:

Code:
string value1 = "0000"
int value2 = 250

OleDbParameter p1 = new OleDbParameter("ParameterName1", value1);
OleDbParameter p2 = new OleDbParameter("ParameterName2", value2);

OleDbCommand cmd = new OleDbCommand(connectionString, "SELECT * FROM WhereEver WHERE feld1 = @ParameterName1 AND feld2 = @ParameterName2");
cmd.Parameters.Add(p1);
cmd.Parameters.Add(p2);

// Alternativ dazu ginge auch

cmd.Parameters.Add(new OleDbParameter("ParameterName1", value1));
cmd.Parameters.Add(new OleDbParameter("ParameterName2", value2));
 
Hallo, ich möchte nochmal Stören. ich bin nun soweit, das ich das in die DB bekommen und könnte damit zufrieden sein... bin ich aber nicht da das mit den Parametern noch nicht so ganz so hinhaut wie ich das will.... ich adde zwar die parameter, aber verwede sie noch nicht so wie es sein sollte....

Code:
private void button1_Click(object sender, EventArgs e)
        {
            DBSchreiben(Convert.ToInt32(tb_Schlüssel.Text), DateTime.Now, false);

        }

        private void DBSchreiben(int pversuche, DateTime pzeit, bool pgewonnen)
        {
            OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\Programme\DPS-GmbH\Zahlenraten\Highscores\Highscores.mdb");
            string strSQL = "SELECT * FROM HighscoreTabelle order by Zeit";
            DataSet ds = new DataSet();
            OleDbCommand cmd = new OleDbCommand(strSQL, con);

            try
            {
                con.Open();
                cmd.CommandText = "Insert into HighscoreTabelle (Zeit, Gewonnen, Versuche) values ('" + pzeit + "', " + pgewonnen + ", @Versuche)";
                cmd.Parameters.Add(new OleDbParameter("@Zeit", pzeit.ToString()));
                cmd.Parameters.Add(new OleDbParameter("@Gewonnen", pgewonnen));
                cmd.Parameters.Add(new OleDbParameter("Versuche", pversuche));
                
                cmd.ExecuteNonQuery();
                con.Close();
            }
            catch (Exception ex)
            {
                string exStr = ex.ToString();
                MessageBox.Show(exStr);
            }
 
Hey, das habe ich jetzt geschafft :) super ...-) aber jetzt habe ich noch ein kleines problem.... die boolsche variable.....kann ich die weiter verwenden? oder muss ich ins nehmen und die als 1 oder 0 füllen?

wenn ich bool weiter verwenden kann, dann WIE?
Code:
private void scoreSchreibenDB(string pzeit, int pgewonnen, int pversuche)
        {
            OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=Highscores\Highscore.mdb");
            string strSQL = "SELECT * FROM HighscoreTabelle order by Zeit";
            DataSet ds = new DataSet();
            OleDbCommand cmd = new OleDbCommand(strSQL, con);

            try
            {
                con.Open();
                cmd.CommandText = "Insert into HighscoreTabelle (Zeit, Gewonnen, Versuche) values (?, ?, ?)";
                cmd.Parameters.Add(new OleDbParameter("", pzeit));
                cmd.Parameters.Add(new OleDbParameter("", pgewonnen));
                cmd.Parameters.Add(new OleDbParameter("", pversuche));

                cmd.ExecuteNonQuery();
                con.Close();
            }
            catch (Exception ex)
            {
                string exStr = ex.ToString();
                MessageBox.Show(exStr);
            }
        }
so sieht das ganze aktuell aus.

außer dem bool-problem gibt es noch ein anderes..... er sagt die kritärien sind unverträglich.... aber ich weiß nicht woran es ligt
 
Zuletzt bearbeitet:
Hallo. Ich habe das Problem jetzt gelöst und schreibe erfolgreich in meine Datenbank.

Nun tut sich ein kleines neues Problem auf. Es geht um einen DataGridView. ich will damit eine mdb Datenbank öffnen. Das geht bei mir zuhause ja schon recht super... aber hier habe ich mit der selben datenbank ein problem... er sagt mir immer wieder, dass das Aufrufzieh einen Ausnahmefehler verursacht hat.. Ich hoffe hier kennt sich jemand damit aus. Bitte helft mir
 
okay, da scheint ihr keine Antwort zu finden.,... naja ega schadel.....

andere Frage...

Ich habe in meiner Tabelle ein Textfeld Zeit, ein Boolfeld Gewonnen und ein Textfeld Schwierigkeit.

im Aktuellen spiel soll nun passsieren, das die Accses Datenbanktabelle nach zeit sortiert wird.

und der ERSTE eintrag, der Gewonne == treu und Schwirigkeit == aktuelle schwirigkeit und aktuelle bestzeit > neue bestzeit ist.... den if körper dürfte ich dann selber hinbekommen, es geht nur um die abfrage wie mach ich die?
 

Neue Beiträge

Zurück