datagrid dataset



  • hi,

    ich versuche ein datagrid mit den inhalt einer tabelle zu füllen, er
    macht es auch ohne fehler nur ist das grid immer leer.

    hier wird es aufgerufren

    private void bttKlasse1_Click(object sender, System.EventArgs e)
    		{
    			string strcompname=resdatei.strcompname;
    			string strdbname=resdatei.strdbname;
    			string strbenutzer=resdatei.strbenutzer;
    			string strpwd=resdatei.strpwd;
    			bool boolMSDE=resdatei.boolMSDE;
    			bool boolSQL=resdatei.boolSQL;
    			bool test;
    			string strklasse="1";
    			dbschueler clsanzschueler=new dbschueler();
    			test=clsanzschueler.schueleranzeigen(strcompname,strdbname,strbenutzer,strpwd,boolMSDE,boolSQL,
    				strklasse);
    
    		}
    

    und das ist die methode zum lesen

    public bool schueleranzeigen(string strcompname,string strdbname,string strbenutzer,
    			string strpwd,bool boolMSDE,bool boolSQL,string strklasse)
    		{
    			string conststring;
    			string strdbart="";
    			if (boolMSDE==true)
    			{
    				strdbart="\\Ferienpass";
    			}
    			if (boolSQL==true)
    			{
    				strdbart="";
    			}
    
    			SqlConnection oSqlConn = new SqlConnection();
    			conststring="Server="+strcompname+strdbart+";Database="+strdbname+";User ID="+
    				strbenutzer+";Password="+strpwd+";Trusted_Connection=False";
    			oSqlConn.ConnectionString=conststring;
    			oSqlConn.Open();
    			try
    			{
    				string sql="SELECT id AS Id, name AS Name,vorname AS Vorname,"+
    					"klasse AS Klasse,klassenzusatz AS Kurs FROM tb_personen "+
    					"WHERE klasse="+strklasse;
    				SqlCommand cmd = new SqlCommand(sql,oSqlConn);
    				dataAdapter = new SqlDataAdapter(sql,oSqlConn);
    
    				dataSet = new DataSet();
    				dataAdapter.Fill(dataSet, "tb_personen");
    				frmanzschueler frmschueler = new frmanzschueler();
    				dataAdapter.Fill(dataSet,"tb_personen");
                	frmschueler.dgridschueler.DataSource=dataSet;		
    			}
    			catch (Exception ex)
    			{
    				#if DEBUG
    				MessageBox.Show(ex.Message);
    				#endif
    				return false;
    			}
    			finally
    			{
    				oSqlConn.Close();
    			}
    		return true;
    		}
    


  • Schreib mal:

    frmschueler.dgridschueler.DataSource = dataSet.Tables["tb_personen"];
    


  • ist immer noch nichts muss wohl woanders liegen der fehler,wie kann ich schauen ob er das dataset auch wirklich mit daten füllt?



  • Auf alle Fälle bleibt bei:

    frmschueler.dgridschueler.DataSource=dataSet;
    

    das DataGrid auch leer.

    So kannst Du prüfen ob überhaupt Tabellen im DataSet enthalten sind.

    MessageBox.Show(ds.Tables.Count.ToString());
    

    Noch etwas zu Deinem Code, warum machst Du die Connection vor dem try - Block auf?
    Was geschieht wenn die Connection eine Ausnahme auslöst?



  • und noch was: von welchem Typ ist die Spalte "klasse" in deiner Tabelle??

    übrigens die Art und Weise, wie du dein SQL String zusammenstellst, öffnet ein riesiges Sicherheitsloch für Angreifer.

    stell dir mal vor, dass jemand so eine Eingabe für strklasse auf irgendeine Art und Weise geschafft hat:

    strklass = "myclass; DROP TABLE tb_person;"

    dann wird zuerst die SELECT-Abfrage ausgeführt und danach die Tabelle tb_person gelöscht.

    man soll bei SQL-Befehlen grundsätzlich mit Parameter arbeiten.



  • als anzahl bekomme ich 1 zurück ist das die anzahl der datensätze? oder der tabellen?
    das mit der connection ist mir noch garnet aufgefallen da ich mit der verbindung öffnen nie n prob hatte 🙂



  • liam schrieb:

    als anzahl bekomme ich 1 zurück ist das die anzahl der datensätze? oder der tabellen?

    Na was wird wohl DataSet.Tables.Count zurückliefern? 😉



  • eigentlich Anzahl der Tabellen in Dataset

    du meinst wohl

    wohl

    DataSet.Tables[name_der_tabelle].Rows.Count



  • mit rows.count bekomme ich 4 zurück (sind aber nur 2 einträge drin)
    die art von klasse ist integer.
    @Xqgene
    wie sehe der befehl mit parametern aus?
    oder kann ich das irgendwo nachlesen?



  • in der msdn-hilfe. such z.b. nach SqlCommand.Papameters oder SqlParameter-Klasse.



  • habe noch n bissel rumprobiert nur bekomme ich jetzt den fehler "untergeordnete liste für tb_personen kann nicht erstellt werden"

    oSqlConn.Open();
    				string sql="SELECT id AS Id, name AS Name,vorname AS Vorname,"+
    					"klasse AS Klasse,klassenzusatz AS Kurs FROM tb_personen "+
    					"WHERE klasse="+strklasse;
    				//instanz der frmanzschueler erzeugen
    				frmanzschueler clsschueler = new frmanzschueler();
    				//DataAdapter für Tabelle tb_personen erstellen
    				tb_dapersonen = new SqlDataAdapter(sql,oSqlConn);
    				tb_dapersonen.MissingSchemaAction = MissingSchemaAction.AddWithKey;
    				//DataGrid an DataSet binden
    				clsschueler.dgridschueler.DataSource = dspersonen;
    				clsschueler.dgridschueler.DataMember = "tb_personen";
    				//DataSet füllen
    				dspersonen.Clear();
    				tb_dapersonen.Fill(dspersonen, "tb_personen");
    

Anmelden zum Antworten