Abstrace classe

Status
Niet open voor verdere reacties.
Hey,

ik heb jouw klasse herschreven. Ik heb m getest en hij werkt. (Insert en Delete en Select)

Maak een KOPIE van jouw bestaande code, mocht het niet werken!

Code:
using System;
using System.Collections.Generic;
using System.Text;
using System.Data.OleDb;
using System.Collections;

namespace DatabaseApplication
{
    class DatabaseManager
    {
        private string _source = @"C:\meetSysteem.mdb";

        private OleDbConnection _link;

        public DatabaseManager()
        {
            //- Een instantie maken van een sql connectie
            _link = new OleDbConnection(GetConnectionString());
        }

        public string GetConnectionString()
        {
            return @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + _source;
        }

        public ArrayList Select(string table, string ordering)
        {
            return this.ExplicitQuery("SELECT * FROM " + table + " ORDER BY " + ordering);
        }

        public bool Toevoegen(string table, string[] schema, params object[] fields)
        {
            if (schema.Length != fields.Length)
                throw new ArgumentException("The number of fields does not match the size of the schema.");
            if (schema.Length <= 0)
                throw new ArgumentException("You need minimal one field to be added.");

            string query = "INSERT INTO [" + table + "] (";
            foreach (string item in schema)
                query += "[" + item + "],";
            //- Laatste comma verwijderen en de waardes toevoegen
            query = query.Remove(query.Length - 1, 1) + ") VALUES (";

            for (int n = 0; n < fields.Length; n++)
                query += "@VALUE" + n.ToString() + ",";
            query = query.Remove(query.Length - 1, 1) + ")";


            OleDbCommand sqlCommand = new OleDbCommand(query, _link);
            for (int n = 0; n < fields.Length; n++)
                sqlCommand.Parameters.AddWithValue("@VALUE" + n.ToString(), fields[n]);

            return ExplicitNonQuery(sqlCommand);
        }
        public bool Verwijderen(string table, string[] keys, params object[] fields)
        {
            if (keys.Length != fields.Length)
                throw new ArgumentException("The number of fields does not match the size of the schema.");
            if (keys.Length <= 0)
                throw new ArgumentException("You need minimal one condition to be removed.");

            string query = "DELETE FROM [" + table + "] WHERE ";

            for (int n = 0; n < keys.Length; n++)
            {
                query += "[" + keys[n] + "]=@VALUE" + n.ToString() + " AND ";
            }
            query = query.Remove(query.Length - 5, 5);

            OleDbCommand sqlCommand = new OleDbCommand(query, _link);
            for (int n = 0; n < fields.Length; n++)
                sqlCommand.Parameters.AddWithValue("@VALUE" + n.ToString(), fields[n]);

            return ExplicitNonQuery(sqlCommand);
        }
        public bool Update(string table, string[] schema, int[] keys, params object[] fields)
        {
            // LETTERLIJK JOUW CODE!
            if (schema.Length != fields.Length)
                throw new ArgumentException("The number of fields does not match the size of the schema.");
            string query = "UPDATE " + table + " SET ";
            for (int i = 0; i < fields.Length; i++)
            {
                bool is_key = false;
                for (int j = 0; j < keys.Length; j++)
                    if (keys[j] == i)
                        is_key = true;
                if (!is_key)
                {
                    query += schema[i] + " = " + Formatted(fields[i]);
                    if (i != fields.Length - 1)
                        query += ",";
                }
            }
            query += " WHERE ";
            for (int i = 0; i < keys.Length; i++)
            {
                query += schema[keys[i]] + " = " + Formatted(fields[keys[i]]);
                if (i != keys.Length - 1)
                    query += " AND ";
            }

            return this.ExplicitNonQuery(query);
            //-
        }

        public bool ExplicitNonQuery(string query)
        {
            return ExplicitNonQuery(new OleDbCommand(query, _link));
        }
        //Deze methode zorgt ervoor dat de functie: 'ExecuteNonQuery' weet waar hij de verbinding moet 
        //openen en dichten en wat hij met de verbinding moet doen.
        public bool ExplicitNonQuery(OleDbCommand sqlCommand)
        {
            try
            {
                
                _link.Open();

                bool vergelijk = false;
                if (sqlCommand.ExecuteNonQuery() > 0)
                    vergelijk = true;
                _link.Close();

                return vergelijk;

            }
            catch
            {
                return false;
            }
        }

        private ArrayList ExplicitQuery(string query)
        {
            try
            {
                ArrayList gebruikersnaam = new ArrayList();

                OleDbCommand sqlCommand = new OleDbCommand(query, _link);
                _link.Open();
                OleDbDataReader reader = sqlCommand.ExecuteReader();
                while (reader.Read())
                {
                    ArrayList a = new ArrayList();
                    for (int i = 0; i < reader.FieldCount; i++)
                        a.Add(reader[i]);
                    gebruikersnaam.Add(a);
                }
                reader.Close();
                reader.Dispose();
                reader = null;
                _link.Close();

                return gebruikersnaam;
            }
            catch
            {
                return new ArrayList();
            }
        }

        private string Formatted(object o)
        {
            return o.ToString();
        }
    }
}

De update methode heb ik NIeT aangepast, omdat ik de jouwe niet snap. Want ik heb SET velden en waardes , en ik heb WHERE velden en waardes... nodig...

Laat maar weten of het werkt, en btw, als de update niet werkt en aangepast moet worden, zeg maar, dan zal ik m aanpassen.

Succes,
Mathijs
 
Laatst bewerkt:
Hoi Mathijs,

Enorm bedankt!

Maar bij:

Code:
public DatabaseManager2()

bitcht ie geeft ie de volgende error:

Code:
Method must have a return type
 
Ik had m al aangepast. Ik had t gezien;)

public DatabaseManager2()
moet worden
public DatabaseManager()

Ik had nog wat aangepast:
private bool ExplicitNonQuery(string query)
werd
public bool ExplicitNonQuery(string query)
 
Dag Mathijs,

oke. Maar het moet wel een abstracte classe blijven.

Gezien mijn andere classen er gebruik van blijven moeten maken.

Ik heb bijvoorbeeld ook een classe: gebruiker
Code:
using DatabaseApplication;
using System;
using System.Collections;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Data.OleDb;
using DatabaseApplication;
using System.Collections.Generic;

namespace DatabaseApplication
{

    //DatabaseManager is de 'base'klasse
   public class Gebruiker : DatabaseManager
   {
       
       private string id;
       private string gebruikersnaam;
       private string wachtwoord;
       private string email;

       public Gebruiker()
       {
       }

       //public SubClass(int int1, int int2):base("","")

       public Gebruiker( string id,string gebruikersnaam, string wachtwoord, string email):base()
       
       {
           this.id = id;
           this.gebruikersnaam = gebruikersnaam;
           this.wachtwoord = wachtwoord;
           this.email = email;
       }
          
       
       public void setID( string value)
       {
           this.id = value;
       }
       public string getID()
       {
           return this.id;
       }
        
        public void setGebruikersnaam ( string value)
        {
            gebruikersnaam = value; 
        }
        public string getGebruikersnaam()
        {
            return gebruikersnaam;
        }
        
        public string getWachtwoord()
        {
            return this.wachtwoord;
        }
        public void setWachtwoord(string value)
        {
            this.wachtwoord = value;
        }
     
        public string getEmail()
        {
            return this.email; 
            
        }
       public void setEmail( string value )
       {
            this.email = value; 
       }

       //public bool Toevoegen(string table, string[] schema, params object[] fields)
       //{      
       //}

       public void format()
    {
        Gebruiker o = new Gebruiker();
        o.ToString();

    }




       
       protected override  string Formatted(object o)
       {
           return null;
         
           Object ob = new object();
           //String query = new string(); 
           //return string;
           

           if (o is System.DBNull)
               return "NULL";
           if (o is bool)
               return (bool)o ? "1" : "0";
           if (o is int)
               return ((int)o).ToString();
           if (o is string)
            //return "'" + ((string)o) + "'";
          return  o.ToString();  //  een fout.



           this.Formatted("");
       }

      
        




    }
}

en een classe: gebruiker_controller:

Code:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;
using System.Configuration;
using System.Collections;
using System.IO;
//using DatabaseApplication;
using DatabaseApplication;


namespace DatabaseApplication
{
   public  class Gebruiker_controller:DatabaseManager 
    {
      
       
       // Constructor
       public Gebruiker_controller()
       {
       }

       public static void databaseFunctie()
       {
           

           ArrayList gebruikersnaam = new ArrayList();
           ArrayList wachtwoord = new ArrayList();
           ArrayList email = new ArrayList();

       }    

     
       public void ToevoegenDatabaseManager(DatabaseManager d)  //( NieuweGebruiker gebruiker )
      
            
       {


           
           //DatabaseManager d = new DatabaseManager();
           Gebruiker gebruiker = new Gebruiker();
           Gebruiker_controller gebruiker_controller = new Gebruiker_controller();

           
            String table = "gebruiker";
            String[] schema = new String[4];
            schema[0] = "id";
            schema[1] = "gebruikersnaam";
            schema[2] = "wachtwoord";
            schema[3] = "email";
            object[] fields = new String[4];
            fields[0] = "";
            fields[1] = gebruiker.getGebruikersnaam();
            fields[2] = gebruiker.getWachtwoord();
            fields[3] = gebruiker.getEmail();
           
        

            
            d.Toevoegen(table, schema, fields);

                
              
       }

       public bool Toevoegen2()
      {
          
          
           return true;
        

          
         
          
       }

       

       // Zorgt ervoor dat automatisch de velden in de tabel worden herkent als:leeg, bool,int, string 
      
       protected override string Formatted(object o)
        {
            if (o is System.DBNull)
                return "NULL";
            if (o is bool)
                return (bool)o ? "1" : "0";
            if (o is int)
                return ((int)o).ToString();
            if (o is string)
                return "'" + (string)o + "'";
            return o.ToString();  // will probably result in an error.
        }
        

      public void nieuweGebruiker(DatabaseManager d)

        {
            //d.Toevoegen();
           

       
       
       }

   }
}

en nu begint ie dus allemaal fout errors te geven, zoals:

Code:
Error	2	Inconsistent accessibility: base class 'DatabaseApplication.DatabaseManager' is less accessible than class 'DatabaseApplication.Gebruiker'	C:\Users\savant\Documents\Visual Studio 2008\Projects\DatabaseApplication3\DatabaseApplication\Gebruiker.cs	17	17	DatabaseApplication

Lijkt me logisch dat je dan:class DatabaseManager verandert in:

Code:
    public abstract  class DatabaseManager:System.Object

Maar dat werkt dus niet.

Ik geef je ook de view van de gebruiker:

Code:
//using DatabaseApplcication;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;
using System.Configuration;
using System.Collections;
using DatabaseApplication;

namespace DatabaseApplication
{
    /// <summary>
    /// Klasse NieuweGebruikerView. De vieuw erft al van een andere base klasse: "Form". 
    /// Maar als de button "Toevoegen geactiveerd wordt moet wel de methode "Toevoegen" uit de 
    /// klasse DatabaseManager aangeropen worden.
    /// 
    /// </summary>

   
        partial class GebruikerView : Form
        {
            Gebruiker temp = new Gebruiker();
            Gebruiker_controller gebruiker_controller = new Gebruiker_controller();
           
           
            
           

            int m_rowPosition = 0;



            public GebruikerView()
            {

                InitializeComponent();
                Gebruiker temp = new Gebruiker();
            
            }
            private void NieuweGebruiker_Load(object sender, EventArgs e)
            {


                
                DatabaseConfig databaseConfig = new DatabaseConfig();

               
            }
            private void NieuweGebruiker_FormClosing(object sender, System.EventArgs e)
            {
                
            }

            private void ShowCurrentRecord()
            {
                
              
            }

           
            //De button om data toe te voegen
            public  void button1_Click(object sender, System.EventArgs e)
            {
              
                if(String .IsNullOrEmpty(this.txtGebruikersnaam.Text)) 
                {
                    MessageBox.Show("Hey je moet wel iets intikken heh!!", "Error");//,
                        
                    return;
                }
                //Hardcode gebruiker met gegevens wordt naar NieuweGebruiker_controller gestuurd.
                

                
                temp.setEmail(txtEmail.Text);
                temp.setWachtwoord(txtWachtwoord.Text);
                temp.setWachtwoord(txtWachtwoordNogmaals.Text);
                temp.setGebruikersnaam(txtGebruikersnaam.Text);

                string argument1 = "voorbeeld";
                string[] argument2 = new string[] { "voor" };
                string[] argument3 = new string[] { "hallo" };
                
                Gebruiker_controller gebruiker_controller = new Gebruiker_controller();
                
                //Kan wel de methode aanroepen.
                //gebruiker_controller.ToevoegenDatabaseManager(temp);
               


                gebruiker_controller.Toevoegen(argument1,argument2,argument3);

                
                   
            }

            
            private void textBox2_TextChanged(object sender, EventArgs e)
            {

            }

            private void txtWachtwoord_TextChanged(object sender, EventArgs e)
            {

            }

            private void txtWachtwoordNogmaals_TextChanged(object sender, EventArgs e)
            {
                /*
                if (txtWachtwoordNogmaals != txtWachtwoord)
                {
                    MessageBox.Show("Wachtwoorden komen niet overeen!");
                }
                 */
            }

            private void txtEmail_TextChanged(object sender, EventArgs e)
            {
               
            }

            private void label1_Click(object sender, EventArgs e)
            {

            }

            //Test button
            private void button1_Click_1(object sender, EventArgs e)
            {
                //NieuweGebruiker temp = new NieuweGebruiker();

                MessageBox.Show("Gebruikersnaam: " + temp.getGebruikersnaam());

                MessageBox.Show("Email: " + temp.getEmail());

                MessageBox.Show("Wachtwoord: " + temp.getWachtwoord());
            }
        }
    }
//}
 
Hey,

even het gebruik van de klasses ophelderen...
Je hebt een Gebruiker. Doe wordt opgeslagen in Gebruiker_controller.
En die controller gebruikt de klasse DatabaseManager voor het toevoegen en verwijderen met de database. En als het programma start, dan moeten alle gebruikers geladen worden in de controller. Of niet?

En even uitleggen.
Een klasse kan ook overgeërft worden als het geen abstracte klasse is.
En het overerven van System.Object hoef je niet te doen.
Als je dat niet toevoegd, wordt die standaard overgeerft van System.Object.

Gr,
Mathijs
 
Hey,

even het gebruik van de klasses ophelderen...
Je hebt een Gebruiker. Doe wordt opgeslagen in Gebruiker_controller.
En die controller gebruikt de klasse DatabaseManager voor het toevoegen en verwijderen met de database. En als het programma start, dan moeten alle gebruikers geladen worden in de controller. Of niet?

En even uitleggen.
Een klasse kan ook overgeërft worden als het geen abstracte klasse is.
En het overerven van System.Object hoef je niet te doen.
Als je dat niet toevoegd, wordt die standaard overgeerft van System.Object.

Gr,
Mathijs

Dag Mathijs

"
Je hebt een Gebruiker. Doe wordt opgeslagen in Gebruiker_controller.
En die controller gebruikt de klasse DatabaseManager voor het toevoegen en verwijderen met de database. En als het programma start, dan moeten alle gebruikers geladen worden in de controller. Of niet?"

Ja dat is helemaal waar.

Maar het is opgelost. Nog enorm bedankt!!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan