DataSet aus Klasse verwenden

Arndtinho

Erfahrenes Mitglied
Hallo,

ich habe ne Klasse für den Aufbau einer Connection zu einer u. Abfrage einer MySQL DB. Weiterhin wird in der Klasse ein DataSet gefüllt. Wie kann ich dieses DS jetzt im MainDialog verwenden um damit ein DataGrid zu füllen?

Code:
public class MySqlCon
{
    public string cmdMySQL;
    public MySqlConnection myCon;
    public MySqlCommand myCmd;
		
    public MySqlCon()
    {
        string strCon = "Server....";
        myCon = new MySqlConnection(strCon);
			
        try
        {
            myCon.Open();
            if(myCon.State != ConnectionState.Open)
	MessageBox.Show("Keine Verbindung zur Datenbank möglich!");
        }
        catch(Exception e)
        {
            MessageBox.Show(e.Message);
        }
    }
		
    public void MySqlCmd(string cmdMySQL)
    {
        MySqlCommand myCmd = new MySqlCommand();
            myCmd.CommandText = cmdMySQL;
            myCmd.Connection = myCon;
    }

    public void GetData()
    {
        MySqlDataAdapter myAd = new MySqlDataAdapter(myCmd);
        DataSet myDs = new DataSet("friends");
        myAd.Fill(myDs, "friends");
        myCon.Close();
    }
}

Und so sieht im Moment der Code meines MainDialog aus:

Code:
public MainForm()
{
    InitializeComponent();
    MySqlCon newCon = new MySqlCon();
    newCon.MySqlCmd("SELECT ... ");
}

Gruß,
Arndtinho
 
Hallo,

habe einen Lösungsansatz . Aber das passt noch nicht.

Methode GetData() der Klasse MySqlCon:

Code:
public DataSet GetData()
{
    try
    {
        ...
        return  myDs;
    }
    catch(Exception e)
    {
        MessageBox.Show(e.Message);
    }
}

Aufruf im MainDialog:

Code:
public MainForm()
{
   ...
   DataSet ds = newCon.GetData();
}

Beim Compilieren erhalte ich jetzt folgenden Fehler:
" 'GetData()': not all code pathsreturn a value "

Was bedeutet dies und wie kann der Fehler behoben werden?


Gruß,
Arndtinho
 
Deine GetData-Methode gibt nur dann einen Wert zurück, wenn der try-Block erfolgreich bis zum Ende ausgeführt wurde. Tritt vorher ein Fehler auf, springt er ja zum catch-Block, in dem kein return steht. Das musst du noch ändern. Probiers mal mit dem finally-Block.
MfG
 
Code:
try
{
...
}
catch(Exception caught)
{
...
}
finally
{
  return myDs;
}

Probier das mal aus.
 
:o(

Funktioniert auch nicht:

"Control cannot leave the body of a finally clause"

Aber ich muss doch irgendwie die Daten des DS aus der Klasse weiterverwenden können, sonst hat doch die Klasse keinen wirklichen Sinn.

Gruß,
Arndtinho
 
Hi,

so sollte es gehen
Code:
public DataSet GetData()
{
    try
    {
        ...
        return  myDs;
    }
    catch(Exception e)
    {
        MessageBox.Show(e.Message);
    }
    return null;
}

MainForm:
Code:
DataSet ds = mySqlCon.GetData()
if(ds != null)
//......
 
Danke, funktioniert. Jetzt weis ich auch woran es liegt.
"The SelectCommand property has not been initialized before calling 'Fill' "

-> Also gleich das nächste Problem.

Gruß,
Arndtinho
 
Zurück