Laden...

Problem mit Dataset und SQL

Erstellt von King-Malkav vor 17 Jahren Letzter Beitrag vor 17 Jahren 1.551 Views
King-Malkav Themenstarter:in
264 Beiträge seit 2006
vor 17 Jahren
Problem mit Dataset und SQL

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

T
327 Beiträge seit 2006
vor 17 Jahren

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?

King-Malkav Themenstarter:in
264 Beiträge seit 2006
vor 17 Jahren

@ 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

King-Malkav Themenstarter:in
264 Beiträge seit 2006
vor 17 Jahren

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

N
4.644 Beiträge seit 2004
vor 17 Jahren

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

if( dataSet.Tables["..."].Rows.Count > 0 )
    // mach was
King-Malkav Themenstarter:in
264 Beiträge seit 2006
vor 17 Jahren

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