Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > .NET Languages
You last visited: Today at 08:52

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



[C#] C# connect to a SQL Database and save songnames from a listbox. [GER & Bad Engl]

Discussion on [C#] C# connect to a SQL Database and save songnames from a listbox. [GER & Bad Engl] within the .NET Languages forum part of the Coders Den category.

Reply
 
Old   #1
 
Tesio's Avatar
 
elite*gold: 0
Join Date: Oct 2011
Posts: 516
Received Thanks: 28
[C#] C# connect to a SQL Database and save songnames from a listbox. [GER & Bad Engl]

For the Englisch Question, please scroll down and sorry for my bad english |
------------------------------------------------------------------------------------------------------------------

Moin leute,

ich bin derzeit dabei Programmieren zu lernen und bin noch ziemlich weit am anfang. Jedenfalls habe ich eine listbox, welche von einem radio sender die song namen von der webseite abgreift. Der titel wird in der listbox angezeigt und alle 60sekunden aktuallisiert ob ein neuer titel drinnen steht.

Jetzt will ich, dass die titel abgespeichert werden, sobald man auf einem button klickt.

Code:
private void button1_Click_1(object sender, EventArgs e)
        {
            
            

            if (listModerator.SelectedIndex == 0)
            {



                SqlConnection TBTracks = new SqlConnection();
                SqlCommand cmd = new SqlCommand();
                TBTracks.ConnectionString = @"Data Source=.\SQLEXPRESS";
                //TBTracks.ConnectionString = 
                //    ".\SQLEXPRESS"+
                //    "Data Source=MeinPC\SQLEXPRESS";
                cmd.Connection = TBTracks;

                con = new SqlConnection(@"Data Source=MeinPC\SQLEXPRESS;Initial Catalog=PVP;Integrated Security=True");
                con.Open();
                cmd = new SqlCommand("SELECT * FROM TB_TRACKS");
                cmd.Connection = con;
                da = new SqlDataAdapter(cmd);
                da.Fill(dt);
                listModerator.Text = dt.Rows[0]["Arstist"].ToString();
                cmd.CommandText =
                    "insert into TB_TRACKS " +
                    "(title, artist)" +
                    listModerator.Text;
                MessageBox.Show(cmd.CommandText);
                con.Close();
Die Tabelle heißt TB_Tracks und hat 3 spalten:

Spaltenname: Datentyp: NULL-Wert:
id uniqueidentifier nein
title nvarchar(50) ja
artist nvarchar(50) ja


Das sind so einige sachen, welche ich alle versucht habe um überhaupt irgendwas zu machen (alles mögliche schon wieder gelöscht und davon sollte eigentlich die hälfte auskommentiert sein).

Ich beschäftige mich seit heute leider erst zum ersten mal überhaupt mit datenbanken, weshalb ich keine ahnung habe wie ich vor gehen soll.
Ich nutze den Microsoft SQL Server b.z.w den SQL Server Managment Sudio.

Ich würde mich freuen, wenn mir jemand helfen kann und dabei ein wenig erklären könnte .

Danke schonmal im vorraus



English:
-----------------------------------------------------------
Hey guys,
i learning programming but i´m programming only since 2 Week´s.
I want to connect to my SQL Database and save the Song titel from a Radio.
The song namens are in the listbox and there updating ervery minute.

My code is very false and have many trash, but i hope you know, what i want ^^


Code:
private void button1_Click_1(object sender, EventArgs e)
        {
            
            

            if (listModerator.SelectedIndex == 0)
            {



                SqlConnection TBTracks = new SqlConnection();
                SqlCommand cmd = new SqlCommand();
                TBTracks.ConnectionString = @"Data Source=.\SQLEXPRESS";
                //TBTracks.ConnectionString = 
                //    ".\SQLEXPRESS"+
                //    "Data Source=MeinPC\SQLEXPRESS";
                cmd.Connection = TBTracks;

                con = new SqlConnection(@"Data Source=MeinPC\SQLEXPRESS;Initial Catalog=PVP;Integrated Security=True");
                con.Open();
                cmd = new SqlCommand("SELECT * FROM TB_TRACKS");
                cmd.Connection = con;
                da = new SqlDataAdapter(cmd);
                da.Fill(dt);
                listModerator.Text = dt.Rows[0]["Arstist"].ToString();
                cmd.CommandText =
                    "insert into TB_TRACKS " +
                    "(title, artist)" +
                    listModerator.Text;
                MessageBox.Show(cmd.CommandText);
                con.Close();

The table have 3 column und his name is TB_Tracks.

Clumnname: Datatype: nil value:
id uniqueidentifier false
title nvarchar(50) true
artist nvarchar(50) true


Sorry for my very bad english, but i can only talk in english ^^

Thanks

Also das Lesen der Datenbank funktioniert aktuell. Bloß das Schreiben noch nicht, wobei mir so langsam die ideen ausgehen^^

Mein aktueller Code:

Code:
private void button1_Click_1(object sender, EventArgs e)
        {
            
            

            if (listModerator.SelectedIndex == 0)
            {



                
                
                listModerator.ToString = Trackname();

                SqlConnection TBTracks = new SqlConnection();
                SqlCommand TBCmd = new SqlCommand();
                SqlDataAdapter writer;
                TBTracks.ConnectionString = @"Data Source=EDP0026NB\SQLEXPRESS;Initial Catalog=PVP;Integrated Security=True";


                TBCmd.CommandText = "INSERT INTO TB_TRACKS (title) VALUES ('" + listModerator +  "');";
                TBCmd.CommandType = CommandType.Text;
                TBCmd.Connection = TBTracks;
                TBCmd.Parameters.AddWithValue("@title", listModerator.Text);
                //TBCmd.Parameters.AddWithValue("@artist", txtArtist.Text);
                TBTracks.Open();
                //TBCmd.ExecuteNonQuery();
                TBTracks.Close();
                






            }
        }

        private void cmdTracksshow_Click(object sender, EventArgs e)
        {
            if (listModerator.SelectedIndex == 0)
            {

                SqlConnection TBTracks = new SqlConnection();
                SqlCommand TBCmd = new SqlCommand();
                SqlDataReader reader;

                TBTracks.ConnectionString = @"Data Source=EDP0026NB\SQLEXPRESS;Initial Catalog=PVP;Integrated Security=True";
                TBCmd.Connection = TBTracks;
                TBCmd.CommandText = "SELECT title from TB_TRACKS";

                try
                {
                    TBTracks.Open();
                    reader = TBCmd.ExecuteReader();
                    lstTracks.Items.Clear();
                    while (reader.Read())
                    {
                        lstTracks.Items.Add(
                            reader["title"]);
                    }
                    reader.Close();
                    TBTracks.Close();
                }

                catch(Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }
Tesio is offline  
Old 04/02/2015, 22:15   #2
 
elite*gold: 0
Join Date: Apr 2008
Posts: 495
Received Thanks: 817
Servus,

zeigt dir Visual Studio eigentlich keine Fehlermeldungen an?
Weil ich bezweifle, dass dieser Code funktioniert:
Code:
listModerator.ToString = Trackname();
Eigentlich müsstest Du eine Meldung a lá "ToString() ist eine Methode und wird wie ein Typ verwendet" erhalten.

Deine Tabelle "TB_Tracks" besitzt eine ID Spalte, die den Datentyp "" verwendet. Es werden GUID's erstellt, welche 36 Stellen haben. Für deine Anwendung ist dies unnötig, hier reicht als Datentyp "int", anschließend die Spalte auf "Primärschlüssel" und "Autoinkrement" stellen.

Zurück zu deinem Code, ich persönlich finde es besser, wenn Du dir ein Model von der Tabelle erstellt und dieses beim auslesen füllst.
Zum Beispiel kann deine Klasse wie folgt aussehen.
Code:
public class Track
{
        public int ID { get; set; }
        public string Title { get; set; }
        public string Artist { get; set; }
}
Nun kannst Du beim auslesen aus der Datenbank auf deine Klasse zugreifen.
Code:
using (SqlConnection sqlConnection = new SqlConnection(@"Data Source=MeinPC\SQLEXPRESS;Initial Catalog=PVP;Integrated Security=True"))
{
	//Falls unsere Verbindung geschlossen ist, bitte öffnen.
	if (sqlConnection.State == ConnectionState.Closed)
		sqlConnection.Open();

	using (SqlCommand sqlCommand = sqlConnection.CreateCommand())
	{
		sqlCommand.CommandType = CommandType.Text;
		sqlCommand.CommandText = "SELECT * FROM TB_Tracks";

		using (SqlDataReader sqlReader = sqlCommand.ExecuteReader())//SQL-Befehl ausführen
		{
			if(!sqlReader.IsClosed)
			{
				while (sqlReader.Read())//Solange Datensätze vorhanden sind
				{
					Track TrackFromDb = new Track()
					{
						ID = sqlReader.GetInt32(0),//0. Spalte ist die ID-Spalte
						Title = sqlReader.GetString(1),
						Artist = sqlReader.GetString(2)
					};

					/*
                                        Wenn Du mehrere Einträge hast, dann erstellst Du dir eine Liste z.B. List<Track> AllTracks und fügst den ausgelesenen Track hinzu.
					if(TrackFromDb != null)
					{
						AllTracks.Add(TrackFromDb);
					}
					*/
				}
			}
		}
	}
}
Bevor wir einen Datensatz hinzufügen, hier nochmal einen Ausschnitt aus deinem Code:
Code:
TBCmd.CommandText = "INSERT INTO TB_TRACKS (title) VALUES ('" + listModerator +  "');";
Ist listModerator eine List<> oder ListView? Bei beiden kannst Du diese Variante nicht verwenden.
Falls listModerator eine Eingabe des Benutzers ist, erlaubst Du Ihn hier eine SQL-Injection durchzuführen.
Code:
string title = "testTitle'); DROP TABLE TB_Tracks;--";
TBCmd.CommandText = "INSERT INTO TB_TRACKS (title) VALUES ('" + title +  "');";

Nun wollen wir einen Datensatz hinzufügen.
Code:
using (SqlConnection sqlConnection = new SqlConnection(@"Data Source=MeinPC\SQLEXPRESS;Initial Catalog=PVP;Integrated Security=True"))
{
	//Falls unsere Verbindung geschlossen ist, bitte öffnen.
	if (sqlConnection.State == ConnectionState.Closed)
		sqlConnection.Open();

	using (SqlCommand sqlCommand = sqlConnection.CreateCommand())
	{
		sqlCommand.CommandType = CommandType.Text;
//INSERT mit einem Parameter (@title) Wird gesetzt mit AddWithValue()
		sqlCommand.CommandText = "INSERT INTO TB_Tracks(title) VALUES (@title);";
		sqlCommand.Parameters.AddWithValue("@title", "EINTITEL")
		
               //SQL-Befehl ausführen
		sqlCommand.ExecuteNonQuery();
	}
}
BTW:Ich persönlich bevorzuge es, Stored Procedures zu erstellen und diese in meinem Programm auszuführen.


P.S.: Schau Dir mal das EntityFramework von Microsoft an, ich persönlich finde es sehr gut und kann es nur weiterempfehlen. Es vereinfacht den Umgang mit Datenbanken immens.

Gruß
schnewin is offline  
Thanks
1 User
Old 04/06/2015, 12:19   #3
 
const*'s Avatar
 
elite*gold: 0
Join Date: Mar 2015
Posts: 776
Received Thanks: 313
Zu deiner Datenbank: weshalb nutzt du nicht einfach eine normale MySQL Datebank? Wenn du sie richtig installiert hast, ist das meiner Erfahrung nach einfacher, als die Visual-Studio Datenbank.
const* is offline  
Old 04/07/2015, 22:10   #4
 
Tesio's Avatar
 
elite*gold: 0
Join Date: Oct 2011
Posts: 516
Received Thanks: 28
Quote:
Originally Posted by schnewin View Post
Servus,

zeigt dir Visual Studio eigentlich keine Fehlermeldungen an?
Weil ich bezweifle, dass dieser Code funktioniert:
Code:
listModerator.ToString = Trackname();
Eigentlich müsstest Du eine Meldung a lá "ToString() ist eine Methode und wird wie ein Typ verwendet" erhalten.

Deine Tabelle "TB_Tracks" besitzt eine ID Spalte, die den Datentyp "" verwendet. Es werden GUID's erstellt, welche 36 Stellen haben. Für deine Anwendung ist dies unnötig, hier reicht als Datentyp "int", anschließend die Spalte auf "Primärschlüssel" und "Autoinkrement" stellen.

Zurück zu deinem Code, ich persönlich finde es besser, wenn Du dir ein Model von der Tabelle erstellt und dieses beim auslesen füllst.
Zum Beispiel kann deine Klasse wie folgt aussehen.
Code:
public class Track
{
        public int ID { get; set; }
        public string Title { get; set; }
        public string Artist { get; set; }
}
Nun kannst Du beim auslesen aus der Datenbank auf deine Klasse zugreifen.
Code:
using (SqlConnection sqlConnection = new SqlConnection(@"Data Source=MeinPC\SQLEXPRESS;Initial Catalog=PVP;Integrated Security=True"))
{
	//Falls unsere Verbindung geschlossen ist, bitte öffnen.
	if (sqlConnection.State == ConnectionState.Closed)
		sqlConnection.Open();

	using (SqlCommand sqlCommand = sqlConnection.CreateCommand())
	{
		sqlCommand.CommandType = CommandType.Text;
		sqlCommand.CommandText = "SELECT * FROM TB_Tracks";

		using (SqlDataReader sqlReader = sqlCommand.ExecuteReader())//SQL-Befehl ausführen
		{
			if(!sqlReader.IsClosed)
			{
				while (sqlReader.Read())//Solange Datensätze vorhanden sind
				{
					Track TrackFromDb = new Track()
					{
						ID = sqlReader.GetInt32(0),//0. Spalte ist die ID-Spalte
						Title = sqlReader.GetString(1),
						Artist = sqlReader.GetString(2)
					};

					/*
                                        Wenn Du mehrere Einträge hast, dann erstellst Du dir eine Liste z.B. List<Track> AllTracks und fügst den ausgelesenen Track hinzu.
					if(TrackFromDb != null)
					{
						AllTracks.Add(TrackFromDb);
					}
					*/
				}
			}
		}
	}
}
Bevor wir einen Datensatz hinzufügen, hier nochmal einen Ausschnitt aus deinem Code:
Code:
TBCmd.CommandText = "INSERT INTO TB_TRACKS (title) VALUES ('" + listModerator +  "');";
Ist listModerator eine List<> oder ListView? Bei beiden kannst Du diese Variante nicht verwenden.
Falls listModerator eine Eingabe des Benutzers ist, erlaubst Du Ihn hier eine SQL-Injection durchzuführen.
Code:
string title = "testTitle'); DROP TABLE TB_Tracks;--";
TBCmd.CommandText = "INSERT INTO TB_TRACKS (title) VALUES ('" + title +  "');";

Nun wollen wir einen Datensatz hinzufügen.
Code:
using (SqlConnection sqlConnection = new SqlConnection(@"Data Source=MeinPC\SQLEXPRESS;Initial Catalog=PVP;Integrated Security=True"))
{
	//Falls unsere Verbindung geschlossen ist, bitte öffnen.
	if (sqlConnection.State == ConnectionState.Closed)
		sqlConnection.Open();

	using (SqlCommand sqlCommand = sqlConnection.CreateCommand())
	{
		sqlCommand.CommandType = CommandType.Text;
//INSERT mit einem Parameter (@title) Wird gesetzt mit AddWithValue()
		sqlCommand.CommandText = "INSERT INTO TB_Tracks(title) VALUES (@title);";
		sqlCommand.Parameters.AddWithValue("@title", "EINTITEL")
		
               //SQL-Befehl ausführen
		sqlCommand.ExecuteNonQuery();
	}
}
BTW:Ich persönlich bevorzuge es, Stored Procedures zu erstellen und diese in meinem Programm auszuführen.


P.S.: Schau Dir mal das EntityFramework von Microsoft an, ich persönlich finde es sehr gut und kann es nur weiterempfehlen. Es vereinfacht den Umgang mit Datenbanken immens.

Gruß

eigentlich war es ziemlich einfach, bloß ich war etwas zu dumm xD
ich habe es doch noch hinbekommen, nachdem ich ein ganzen tag damit verschwendet habe aber naja, jedenfalls ist deine art nicht so umständlich und einfacher, als es jetzt gemacht habe ^^ Jedenfalls danke trotzdem für die antwort und extrem gute erklärung (ich habe einige sachen jedenfalls besser verstanden)

ich habe mein projekt jetzt bloß auf dem leppi, welcher gerade von meinem schwager genutzt wird, sonst hätte ich meine lösung noch rein geschrieben, aber naja^^

ich habe mir jedenfalls noch ein paar beiträge durch gelesen und muss sagen, das du echt gut erklären kannst
Tesio is offline  
Reply


Similar Threads Similar Threads
C++ Daten in Datei abspeichern
11/10/2012 - C/C++ - 4 Replies
Hallo, kann mir jemand den Befehl für das abspeichern von Variablenwerten in einer Datei geben, beispielsweise eine einfaches Textdokument? Best Regards
Value abspeichern
10/11/2011 - AutoIt - 2 Replies
Servus Leute. Ich wollt euch Fragen wie ich ne Value in eine Variable abspeichern kann, ohne das sich der Value verändert, auch nicht wenn sich der Value ingame verändert. z.B sowas Global $ModuleSkill = _MemoryModuleGetBaseAddress ($PID, "TClient.exe") + 0x0123456 Global $OffsetSkill
[Release]Server+DB abspeichern
07/16/2010 - Metin2 PServer Guides & Strategies - 1 Replies
Hey Com da die SuFu nix gebracht hat zeig ich euch jetzt mal wie man den Server speichert (die db u.s.w.) Also 1.Möglichkeit: Einfach die Mt2.vhd in einen anderen Ordner kopieren... und wenn der Server kaputt ist einfach wieder rein kopieren. Und 2.Möglichkeit: In Navicat einloggen und auf Export Wizard klicken>sql auswählen>Was ihr wollt auswählen>bei export Verzeichnis auswählen>weiter>start So dann die gespeicherte .sql Datei öffnen und schreibt vorne dran: /* Navicat MySQL Data...
[Frgen/Hilfe] Abspeichern von Daten & verschiedenes bei WinFenster
06/23/2010 - AutoIt - 18 Replies
Hi Leute, wie meine Überschrift, wahrscheinlich etwas unverständlich, versucht zu erklären, benötige ich eure Hilfe in genau zwei Dingen. 1st : Ich hab ein Programm, in welches man eintragen kann, was es per Tastenklick wiedergeben soll (eine bestimmte Tastenkombi ) Meine Frage ist es nun, wie ich in den Bot integrieren kann, dass der User abspeichern kann, was geschrieben werden soll, also wenn er den Bot neu startet wieder das selbe da steht.
[Hilfe] Änderungen am Server abspeichern?
10/14/2008 - WoW Private Server - 3 Replies
Hey E*pvpers. Heute hab ich auch mal ne Frage für euch =) Hab hier meinen kleinen privatserver, und wollte hier und dort ein paar stühle hinstellen.. Nach nem Server-restart sind alle stühle weg. Wie kann ich sie so abspeichern das sie auch dort bleiben :o? Danke im vorraus



All times are GMT +1. The time now is 08:53.


Powered by vBulletin®
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2026 elitepvpers All Rights Reserved.