C#.Net DBConnection.cs

Blackhawk50000

Erfahrenes Mitglied
Hi, ich möchte sehr gerne eine cs datei erstelklen die die daten bank verbindung aufbaut und die ich auch modifizieren kann.... ich bin noch neu im bereich datenbanken und baue die verbindung zur zeit so auf
Code:
OleDbConnection database = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=Highscores\Highscores.mdb");
            strSQL = "SELECT * FROM Spielerdaten WHERE Spielername = '" + this._SpielerName + "'";
            DataSet ds = new DataSet();
            OleDbCommand SQLQuery = new OleDbCommand(strSQL, database);
            database.Open();
            OleDbDataReader dr = SQLQuery.ExecuteReader();
            dr.Read();

so lese ich die daten.... ich möchte aber die SELECT abfrage sehr gerne verändern und dann von der neuen select anweiseung lesen, aber diese hier soll auch gelesen werden....

und nun möchte ich gerne wissen, wie ich das in ne extra dateil auslagere auf die ich zugreifen kann, und die ich mit parametern verändern und neu ausführen kann.... wo ich dann auch strSQL verändern kann damit der OleDbDataReader von einer anderen abfrage lesen kann....
 
Hallo BlackHawk,

ich habe solche Probleme in dem gelöst, daß ich das Öffnen der DB in eine eignene Klasse "C_DB" ausgelagert habe und den SQL-String immer mit übergebe, so wie ich ihn bauche.
Das hat den Vorteil das du die DB-Conection nur einmal schreiben muss und im gesamten Programm zugriff darauf hast.

Also ungefähr so;

extra Klasse C_DB anlegen.
PHP:
public class C_DB
{
    public DB_conn(string strSQL) 
   {
     OleDbConnection database = new OleDbConnectio (@"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=Highscores\Highscores.mdb");
            DataSet ds = new DataSet();
            OleDbCommand SQLQuery = new OleDbCommand(strSQL, database);
            database.Open();
            OleDbDataReader dr = SQLQuery.ExecuteReader();
            dr.Read();
   }
}

PHP:
public class C_Form1
{
    public void SQL_version1 
   {
     string strSQL = "SELECT * FROM Spielerdaten WHERE spielername= '"._SpielerName + "'";
  
     C_DB c_db1 = new C_DB();
     c_db1.DBconn(strSQL);
// den SpielerName musst du natürlich an dieser stelle wissen....
   }

 public void SQL_version2
   {
       string strSQL = "SELECT * FROM DB_Name;
       C_DB c_db2 = new C_DB();
       c_db2.DBconn(strSQL);   
   }

}

im Programm selbst jetzt C_DB instanzieren und aufrufen, dabei den strSQL übergeben.

Somit kannst du immer verschieden SQL befehle übergeben und hast die DB Conection nur einmal....

Habe den Sytanx schnell aus dem Kopf geschrieben, also nicht wundern wenn paar schmitzer drin sind.
Es geht ja auch nur ums prinzip.
Wem diese Version nicht gefällt, bitte bescheid sagen, bin ja auch noch Anfänger... und offen für andere Versionen.

Hoffe das ich dir damit helfen konnte.
 
Zuletzt bearbeitet:
Also der Ansatz von davejarjarbinks ist schon ganz gut, allerdings würd ich ihm auf die Finger hauen wenn ich sowas sehe:

Code:
string query = "SELECT * FROM aaa WHERE aaa.BBB = '"+ var +"'";

Optimieren kann man das, indem man eine Methode erstellt die neben der Query - die dann ein klein wenig optimiert werden muss - noch eine Liste von DbParametern, bzw. eine Key&Value *Dictionary<string,object>* übergibt welche die Werte beinhalten die dem WHERE/Teil zugefügt werden sollen.
Die optimierte Query wäre dann

Code:
string query = "SELECT * FROM aaa WHERE aaa.BBB = @var";

Die Methodensignatur

Code:
public DbDataReader GetDataReader(string query, List<DbParameter> parameters)

Es kann dann weiter so verfahren werden wie im Quelltext von davejarjarbinks, allerdings muss dem DbCommand (OleDbCommand) noch die Parameter in einer Schleife hinzugefügt werden

Code:
foreach(DbParameter parameter in paramenters)
   myDbCommand.Parameters.Add(parameter);


Anschließend kann die Query ausgeführt werden.

Dem Constructor der Klasse würde ich überladungen spendieren, damit du einmal den Connectionstring übergeben kannst, oder als alternative ein ConnectionStringSettings-Objekt an das du kommst indem du deinen ConnectionString in die App.config -im Node ConnectionStrings- und ihn dir dann über

Code:
ConnectionStringSettings settings =  ConfigurationManager.ConnectionStrings["DefaultConnectionString"]

holst.
 
Zurück