Hi Leute,
hab folgendes Problem.
Hab die Daten meiner Programme immer in einer Access-DB gespeichert. Bei meinem neuen Projekt kann ich das aber nicht mehr machen weil das Programm von 2 Standorten genutzt werden soll. Deswegen möchte ich als DB die SQL-DB meines Webservers nutzen.
Hab auch schon das Forum diesbezüglich durchsucht und auch schon einiges ausprobiert. Bekomme es aber einfach nicht hin.
Mein Programm ist so aufgebaut, dass ich eine Klasse namens "DBZugriff.cs" habe, wo ich dann die DB-Connection öffne und auch schließe.
dann habe ich eine andere Klasse, z.B. dbStation.cs, die die SQL-Anweisung beinhaltet.
Wär echt super, wenn mir jemand helfen könnte, dass ich in meinem Programm so wenig wie möglich umschreiben müsste.
hab folgendes Problem.
Hab die Daten meiner Programme immer in einer Access-DB gespeichert. Bei meinem neuen Projekt kann ich das aber nicht mehr machen weil das Programm von 2 Standorten genutzt werden soll. Deswegen möchte ich als DB die SQL-DB meines Webservers nutzen.
Hab auch schon das Forum diesbezüglich durchsucht und auch schon einiges ausprobiert. Bekomme es aber einfach nicht hin.
Mein Programm ist so aufgebaut, dass ich eine Klasse namens "DBZugriff.cs" habe, wo ich dann die DB-Connection öffne und auch schließe.
Code:
using System;
using System.Data; // für Datenbankzugriff
using System.Data.OleDb; // für Datenbankzugriff
using System.Windows.Forms; // für Datenbankzugriff
namespace Verwaltung
{
/// <summary>
/// Zusammenfassung für DBZugriff.
/// </summary>
public class DBZugriff
{
public DBZugriff()
{
//
// TODO: Fügen Sie hier die Konstruktorlogik hinzu
//
}
// Das Datenbank-Verbindungsobjekt
protected static OleDbConnection verbindung = null;
public static bool openDB()
{
// erstelle Verbindungsobjekt
verbindung = new OleDbConnection("Provider = Microsoft.Jet.OLEDB.4.0; Data Source = \"C:/Programme/Einkaufsverwaltung/datenbank.mdb\"");
//verbindung = new OleDbConnection("Provider = Microsoft.Jet.OLEDB.4.0; Data Source = \"datenbank.mdb\"");
try
{
// öffne Verbindung
verbindung.Open();
return true;
}
catch(InvalidOperationException ioe)
{
MessageBox.Show(ioe.Message, "Fehler 1 beim Öffnen der DB");
return false;
}
catch(OleDbException ode)
{
MessageBox.Show(ode.Message, "Fehler 2 beim Öffnen der DB");
return false;
}
}
public static void closeDB()
{
verbindung.Close();
}
// Diese Funktion wird deshalb hier geschrieben weil es ja für jede
// Klasse das selbe ist wenn sie ne neue Identnr braucht
// Der einzige Unterschied ist immer nur der Tabellenname
// STATIC = man braucht kein Objekt um diese Funktion aufrufen zu können
public static int getNeueIdentNr(string tabname)
{
// SQL-String
string sql = "select max(identNr) from " + tabname;
// erstelle Command-Objekt
OleDbCommand befehl = new OleDbCommand(sql, verbindung);
// führe Befehl aus und empfange Daten
OleDbDataReader daten = befehl.ExecuteReader();
// nächste freie IdentNr
int neueIdent = 1;
if (daten.Read() == true)
{
if (!daten.IsDBNull(0))
{
neueIdent = daten.GetInt32(0) + 1;
}
daten.Close();
}
return neueIdent;
}
}
}
dann habe ich eine andere Klasse, z.B. dbStation.cs, die die SQL-Anweisung beinhaltet.
Code:
using System;
using System.Data;
using System.Data.OleDb;
namespace Verwaltung
{
/// <summary>
/// Zusammenfassung für dbStation.
/// </summary>
public class dbStation : Verwaltung.DBZugriff
{
public static bool dbSelect(Stationen stationen, string kommnr)
{
//SQL-String
string sql = "select * from Station where KommNr = '" + kommnr +"' order by StationNr";
//erstelle Befehsobjekt
OleDbCommand befehl = new OleDbCommand(sql, verbindung);
//führe Befehl aus und empfange Daten
OleDbDataReader daten = befehl.ExecuteReader();
//lies den nächsten Satz
while(daten.Read()==true)
{
//erzeuge Kommissionsobjekt
Station station = new Station(kommnr);
//Datensazt in Kommissionssobjekt schreiben
if(!daten.IsDBNull(0)) station.IdentNr = daten.GetInt32(0);
if(!daten.IsDBNull(1)) station.StationNr = daten.GetString(1);
if(!daten.IsDBNull(3)) station.Bezeichnung = daten.GetString(3);
if(!daten.IsDBNull(4)) station.Lieferant = daten.GetString(4);
if(!daten.IsDBNull(5)) station.Liefertermin = daten.GetDateTime(5);
if(!daten.IsDBNull(6)) station.Preis = daten.GetDecimal(6);
if(!daten.IsDBNull(7)) station.Geliefert = daten.GetString(7);
if(!daten.IsDBNull(8)) station.InFertigung = daten.GetDateTime(8);
if(!daten.IsDBNull(9)) station.EnddatumKaufteile = daten.GetDateTime(9);
if(!daten.IsDBNull(10)) station.EnddatumStation = daten.GetDateTime(10);
if(!daten.IsDBNull(11)) station.Auslieferung = daten.GetDateTime(11);
if(!daten.IsDBNull(12)) station.Vormontage = daten.GetDateTime(12);
station.InDB = true;
//Mitgliedsobjekt dem Behälter hinzufügen
stationen.Add(station);
}
daten.Close();
return true;
}
// fügt ein Kommissionsobjekt in der DB ein
public static int dbInsert(Station station)
{
// hole nächste IdentNr
station.IdentNr = getNeueIdentNr("Station");
// SQL-Befehl
string sql = "insert into Station "
+ "(IdentNr,StationNr, KommNr, Bezeichnung, Lieferant, Liefertermin, Preis, Geliefert, InFertigung, EnddatumKaufteile, EnddatumStation, Auslieferung, Vormontage)"
+ "values("
+ station.IdentNr+",'"
+ station.StationNr+"','"
+ station.KommNr+ "','"
+ station.Bezeichnung+ "','"
+ station.Lieferant+ "','"
+ station.Liefertermin+ "','"
+ station.Preis+ "','"
+ station.Geliefert+ "','"
+ station.InFertigung+ "','"
+ station.EnddatumKaufteile+ "','"
+ station.EnddatumStation+ "','"
+ station.Auslieferung+ "','"
+ station.Vormontage+ "')";
// erstelle Befehlsobjekt
OleDbCommand befehl = new OleDbCommand(sql, verbindung);
// führe Befehl aus
int anzahl = befehl.ExecuteNonQuery();
if (anzahl>0)
{
station.InDB = true;
}
return anzahl;
}
// ändert einen Datensatz
public static int dbUpdate(Station station)
{
// SQL-Befehl
string sql = "update Station set StationNr='"+station.StationNr
+"', Bezeichnung='"+station.Bezeichnung
+"', Lieferant='"+station.Lieferant
+"', Liefertermin='"+station.Liefertermin
+"', Preis='"+station.Preis
+"', Geliefert='"+station.Geliefert
+"', InFertigung='"+station.InFertigung
+"', EnddatumKaufteile='"+station.EnddatumKaufteile
+"', EnddatumStation='"+station.EnddatumStation
+"', Auslieferung='"+station.Auslieferung
+"', Vormontage='"+station.Vormontage
+"' where IdentNr="+station.IdentNr;
// erstelle Befehlsobjekt
OleDbCommand befehl = new OleDbCommand(sql, verbindung);
// führe Befehl aus
int anzahl = befehl.ExecuteNonQuery();
return anzahl;
}
public static int dbDelete(int id)
{
// SQL-Befehl
string sql = "delete from Station where IdentNr = " + id;
// erstelle Befehlsobjekt
OleDbCommand befehl = new OleDbCommand(sql, verbindung);
// führe Befehl aus
int anzahl = befehl.ExecuteNonQuery();
return anzahl;
}
}
}
Wär echt super, wenn mir jemand helfen könnte, dass ich in meinem Programm so wenig wie möglich umschreiben müsste.