Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Problem mit Dataset und SQL
King-Malkav
myCSharp.de - Member

Avatar #avatar-2613.jpg


Dabei seit:
Beiträge: 264
Herkunft: Landau

Themenstarter:

Problem mit Dataset und SQL

beantworten | zitieren | melden

Hi Community,

hab ein kleines Problem und zwar ruf ich mir über einen inner join daten aus mehreren Tabellen ab und möchte diese dann in Textfelder schreiben.

Hier mal mein inner Join:

 
private void button6_Click(object sender, System.EventArgs e)
		{
			// Ausgewählte Hardware ID in Variable zähler laden
				
			string zähler = listBox1.SelectedValue.ToString();
			
			// HardwareID laden und die dazugehörigen TypID und HerstellerID holen
			SqlDataAdapter da = new SqlDataAdapter("SELECT [Hardware ID], Seriennummer, Bemerkungen, Hersteller, hardWareTyp FROM hardware INNER JOIN hersteller ON (hardware.HerstellerID = hersteller.ID )INNER JOIN hardtyp ON (hardware.TypID = hardtyp.HWID) WHERE [Hardware ID] = @ID", sqlConnection1);
			da.SelectCommand.Parameters.Add("@ID", SqlDbType.Int,4).Value = zähler;
			DataSet ds = new DataSet();
			
			try
			{				
				ds.Clear();
				sqlConnection1.Open();
				da.Fill(ds, "test");
				sqlConnection1.Close();
			}
			catch (Exception ex)
			{
				MessageBox.Show("Fehler " + ex.Message, "Fehler", MessageBoxButtons.OK,MessageBoxIcon.Error);
			}

			dataGrid2.DataSource = ds.Tables["test"].DefaultView;

Zum test ob der Inner Join richtig funktioniert hab ich die Daten in ein DataGrid schreiben lassen. Jetzt komm ich leider nur sehr umständlich an die Daten ran um sie in die Textfelder zu schreiben.


DataTable dtHersteller = ds.Tables["hersteller"];
DataRow aRowHersteller = dtHersteller.Rows[0];
string strhersteller = aRowHersteller["Hersteller"].ToString();
textBox3.Text = strhersteller;
 

Diesen weg finde ich sehr umständlich, wenn man einges an Feldern umsetzen muss. Gibt es einen einfacheren und schnelleren weg?

Danke für die Hilfe.

MFG
private Nachricht | Beiträge des Benutzers
telnet
myCSharp.de - Member



Dabei seit:
Beiträge: 327

beantworten | zitieren | melden

Und wenn du alles in eine Zeile schreibst?


textBox3.Text = ds.Tables["hersteller"].Rows[0]["Hersteller"].ToString();

Kürzer gehts glaub ich ned.

Allerdings fallen mir ein paar Sachen auf, die ich nicht unbedingt machen würde:
1. Datenbankfelder mit Leerzeichen ("Hardware ID")
2. Umlaute schreiben (Variable string zähler)

Wie ist da so die allgemeine Meinung dazu?
private Nachricht | Beiträge des Benutzers
King-Malkav
myCSharp.de - Member

Avatar #avatar-2613.jpg


Dabei seit:
Beiträge: 264
Herkunft: Landau

Themenstarter:

beantworten | zitieren | melden

@ telnet

Danke werds mal testen.

Das mit den Umlauten und den Datenbakfeldern hab ich selbst schon bereuht.
Ich muss sagen, dass ich noch ein Anfänger in sachen C# und SQL bin.
Das ganze ist ein Testprogramm und da ich nur Montags und Dienstags programmieren (bzw. Basteln) kann. Ist das ganze Ding ein ziemliches Flickwerk.

Ich werde vermutlich eh alles nochmal neu machen, da ich jede woche was anderes dazulerne und mich dann ärgere, warum ich es vorher so kompliziert gemacht habe.

Du willst gar nicht wissen wieviel zeilen Code der Inner Join ersetzt

MFG
private Nachricht | Beiträge des Benutzers
King-Malkav
myCSharp.de - Member

Avatar #avatar-2613.jpg


Dabei seit:
Beiträge: 264
Herkunft: Landau

Themenstarter:

beantworten | zitieren | melden

Gibt es eine Möglichkeit bei CSharp eine leere Abfrage abzufangen, sprich wenn beim INNER JOIN eine leere Antwort (kein Ergebnis) zurückgegeben wird.

Dann bleibt C# ja stehen bzw. bringt eine Fehlermeldung. Wie umgeht man das?

MFG
private Nachricht | Beiträge des Benutzers
Noodles
myCSharp.de - Experte



Dabei seit:
Beiträge: 4.644
Herkunft: Leipzig

beantworten | zitieren | melden

Dein Anwendung bleibt vlt. stehen, aber nicht C#.

if( dataSet.Tables["..."].Rows.Count > 0 )
    // mach was
private Nachricht | Beiträge des Benutzers
King-Malkav
myCSharp.de - Member

Avatar #avatar-2613.jpg


Dabei seit:
Beiträge: 264
Herkunft: Landau

Themenstarter:

beantworten | zitieren | melden

Zitat
Original von Noodles
Dein Anwendung bleibt vlt. stehen, aber nicht C#.

if( dataSet.Tables["..."].Rows.Count > 0 )
    // mach was

Danke hat mit...

if( dataSet.Tables["..."].Rows.Count == 0 )
    // mach was

Funktioniert.

MFG
private Nachricht | Beiträge des Benutzers