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
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:
Wie ist da so die allgemeine Meinung dazu?
@ 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
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
Dein Anwendung bleibt vlt. stehen, aber nicht C#. 😉
if( dataSet.Tables["..."].Rows.Count > 0 )
// mach was
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