broke
broke

Reputation: 8302

Trouble with my property using C#

I am having trouble with my property always being null in my app, but I believe that the problem may be deeper than that. The requirement is to have a data layer class that contains my connection string to my access database. This calls another class which pulls the database information and sets it back to the data layer class. I must then use ONLY the data layer class to get my records. The problem is that my property is always null. Here is the code for the data layer class:

{
class CustomerDL
{

    OleDbConnection aConnection = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=CIS3341.accdb;");
    string names;
    public void initializeConnection() 
    {
        Customer.initializeConnection(aConnection); 
    }


    public string getNames
    {
        get { return names; }
        set { names = value; }
    }

}

}

And here is the other class:

 class Customer
{

    static OleDbConnection aConnection = null;
    string names;

    public static void initializeConnection(OleDbConnection aDbConnection)
    {

        aConnection = aDbConnection;
        aConnection.Open();
        getNames();
    }
    public static void getNames()
    {
        CustomerDL aCustomer = new CustomerDL();
        OleDbDataAdapter myAdapter = new OleDbDataAdapter();
        if (aConnection.State == ConnectionState.Closed)
        {
            aConnection.Open();
        }
        OleDbCommand cmd = aConnection.CreateCommand();
        OleDbDataReader dbReader = null;
        cmd.CommandText = "SELECT CustomerName FROM Customer";
        dbReader = cmd.ExecuteReader();
        while (dbReader.Read())
        {
            aCustomer.getNames +=  (string)dbReader["CustomerName"].ToString() + "\r\n";
        }

        dbReader.Close();
        //return aCustomer ;


    }

}

Now when i use this code on my form:

 public partial class Form1 : Form

{
    CustomerDL customer = new CustomerDL();
    public Form1()
    {
        InitializeComponent();
        customer.initializeConnection();
        string fast = customer.getNames;
        richTextBox1.Text = fast;
    }

customer.getNames; is always null. Any ideas?

Upvotes: 1

Views: 145

Answers (5)

AGoodDisplayName
AGoodDisplayName

Reputation: 5653

One of the problems that is preventing you from figuring this one out is your naming conventions...

  • You have both properties and methods named the same (I would leave the word "get" off of properties).
  • You have a "CustomerDL" object that you named "customer". The problem is you also have a "Customer" class.
  • You have a static method coded to do what you want, but you are never calling it.

IMHO if you take a little more care in your naming conventions, it will be a lot easier to troubleshoot these kinds of issues....There are a few things wrong with the code, but I quickly gave fixing it a shot. Hope it helps:

class CustomerDL   
{ 
    OleDbConnection aConnection = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=CIS3341.accdb;");   

    public string GetNames()
    {
        string NamesToReturn = ""; 

        try 
        {
            OleDbDataAdapter myAdapter = new OleDbDataAdapter();     
            if (aConnection.State == ConnectionState.Closed)     
            {     
                aConnection.Open();     
            }     

            OleDbCommand cmd = aConnection.CreateCommand();     
            OleDbDataReader dbReader = null;     

            cmd.CommandText = "SELECT CustomerName FROM Customer";    

            dbReader = cmd.ExecuteReader();     

            while (dbReader.Read())     
            {     
                NamesToReturn +=  (string)dbReader["CustomerName"].ToString() + "\r\n";     
            }     

            dbReader.Close();

        catch(Exception ex)
        {

        }
        finally
        {
            aConnection.Close(); //makes sure it closes...
        }   


        return NamesToReturn;
     }     

}    


Then you can do this:

class Customer              
{         

    private CustomerDL customerData = new CustomerDL(); 

    public string Names { get; set; }            

    public string FillNames()
    {
        this.Names = customerData.GetNames();
    }  
}              


public partial class Form1 : Form                    
{             
    Customer customer = new Customer();             
    public Form1()             
    {             
        InitializeComponent(); 

        customer.FillNames();
        richTextBox1.Text = customer.Names;                        
    }   
 }

Note: This code is very crude and I have not double checked it, but I beleive it will get you pointed in the right direction.

Upvotes: 1

Lane
Lane

Reputation: 2719

You really should consolidate the Customer and CustomerDL classes into one class. There is too much duplication. So instead of having CustomerDL call Customer, just put the getnames() code in your CustomerDL class. And scrap all the static modifiers. By your form example, you are instantiating CustomerDL and calling methods on it. Make the class and its methods non-static, and this will work much better for you.

Upvotes: 1

Albin Sunnanbo
Albin Sunnanbo

Reputation: 47038

in CustomerDL the member names has the default value null, you can initialize it with string names = string.Empty;

Upvotes: 1

Femaref
Femaref

Reputation: 61427

customer.getNames never gets accessed whatsoever. You are initializing your connection, but in that method you use a new CustomerDL: CustomerDL aCustomer = new CustomerDL();. You have to provide that instance to the static method for it to do something.

Upvotes: 1

Daniel A. White
Daniel A. White

Reputation: 190897

You aren't assigning anything to the proper instance of CustomerDL.

Upvotes: 2

Related Questions