F# - Fluent NHibernate - POCO Class Object

The next thing I want to try is to use an F# Class (instead of C#) with Fluent NHibernate.

In my last post I worked with a C# Class & Fluent NHibernate.  The C# Class looked as follows:

------------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace StockPrices {

    public class COMPANY {

        public virtual int Id { get; set; }
        public virtual string COMPANY_NAME { get; set; }
        public virtual string COMPANY_TICKER { get; set; }
        public virtual int ASSET_TYPE_ID { get; set; }
        public virtual int IS_ACTIVE { get; set; }

    }

}
------------------------------------------------------------------

So how do we make the same class in F#?

The first thing I tried was this:


------------------------------------------------------------------
#light

namespace StockPrices

open System
open System.Collections.Generic

    // -----------------  1
    type COMPANY = class

        [<DefaultValue>] val mutable Id : int
        [<DefaultValue>] val mutable COMPANY_NAME : string
        [<DefaultValue>] val mutable COMPANY_TICKER : string
        [<DefaultValue>] val mutable ASSET_TYPE_ID : int
        [<DefaultValue>] val mutable IS_ACTIVE : int

        new() = {}
       
    end
------------------------------------------------------------------

This is the simplest way of setting up a class in F#.

In this example, I use the default constructor -- these are the open parentheses in the New() statement.  Therefore, my properties are not initialized.  In F# this is a no no and is not allowed.  When you do not initialize a variable you need to use the [<DefaultValue>] attribute to initialize the value to Zero, it that is possible. 

From Microsoft:  "The DefaultValue attribute is required on explicit fields in class types that have a primary constructor. This attribute specifies that the field is initialized to zero. The type of the field must support zero-initialization."

So, the above statement gives me a class with five public variables -- the integers are initialized with Zeros; the strings are initialized with Nulls.


The following is my main F# program.  Note that my COMPANY class is in a module called StockPrices that I open at the start of the program.

-----------------------------------------------------------------------------------------------
#light
open System
open System.Collections.Generic
open System.IO
open StockPrices

open FluentNHibernate.Automapping
open FluentNHibernate

let properties = new Dictionary<string, string>()

properties.Add("connection.provider", "NHibernate.Connection.DriverConnectionProvider")
properties.Add("dialect", "NHibernate.Dialect.MsSql2000Dialect")
properties.Add("connection.driver_class", "NHibernate.Driver.SqlClientDriver")
properties.Add("show_sql", "true")

properties.Add("proxyfactory.factory_class", "NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle")

let connString = "server='BIG_ROCK\LOGGERSEDGE';Initial Catalog=SMDATA;User ID=sa;Password=XXXXX"
properties.Add("connection.connection_string", connString)

//-> The New
let autoMappings = (FluentNHibernate.Automapping.AutoMap.AssemblyOf<StockPrices.COMPANY>()).Where(fun t -> (t.Namespace="StockPrices"))

let aConfig = (new NHibernate.Cfg.Configuration()).AddProperties(properties).AddAutoMappings(autoMappings)

let sessionFactory = aConfig.BuildSessionFactory()

let aSession = sessionFactory.OpenSession()

aSession.BeginTransaction()

//AT&T is Id 100
let coID = 100

let someObj = aSession.Load(typeof<StockPrices.COMPANY>, coID) :?> StockPrices.COMPANY

printfn "Company Name: %s,  Ticker: %s" someObj.COMPANY_NAME someObj.COMPANY_TICKER


aSession.Close()

let userresp = Console.ReadLine()
-----------------------------------------------------------------------------------------------

This program craps out on the line:

let aConfig = (new NHibernate.Cfg.Configuration()).AddProperties(properties).AddAutoMappings(autoMappings)

with the error:

{"(XmlDocument)(2,4): XML validation error: The element 'class' in namespace 'urn:nhibernate-mapping-2.2' has incomplete content. List of possible elements expected: 'meta, subselect, cache, synchronize, comment, tuplizer, id, composite-id' in namespace 'urn:nhibernate-mapping-2.2'."}

To be honest, I really have no clue what this all means.

So, I decide to take another tack.  I try an F# class that actually uses the 'member' syntax:

-----------------------------------------------------------------------------------------------
    type COMPANY() = class
   
        let mutable _Id : int = 0
        let mutable _COMPANY_NAME : string = ""
        let mutable _COMPANY_TICKER : string = ""
        let mutable _ASSET_TYPE_ID : int = 0
        let mutable _IS_ACTIVE : int = 0

        member x.Id with get() = _Id and set(v) = _Id <- v
        member x.COMPANY_NAME with get() = _COMPANY_NAME and set(v) = _COMPANY_NAME <- v
        member x.COMPANY_TICKER with get() = _COMPANY_TICKER and set(v) = _COMPANY_TICKER <- v
        member x.ASSET_TYPE_ID with get() = _ASSET_TYPE_ID and set(v) = _ASSET_TYPE_ID <- v
        member x.IS_ACTIVE with get() = _IS_ACTIVE and set(v) = _IS_ACTIVE <- v

    end
-----------------------------------------------------------------------------------------------

I rerun the my program.

This time, I make it one more line before it crashes on the line:

let sessionFactory = aConfig.BuildSessionFactory()

This time I get this big ugly:

NHibernate.InvalidProxyTypeException was unhandled
Message="The following types may not be used as proxies:
StockPrices.COMPANY: method get_Id should be 'public/protected virtual' or 'protected internal virtual'
StockPrices.COMPANY: method set_Id should be 'public/protected virtual' or 'protected internal virtual'
StockPrices.COMPANY: method get_COMPANY_NAME should be 'public/protected virtual' or 'protected internal virtual'
StockPrices.COMPANY: method set_COMPANY_NAME should be 'public/protected virtual' or 'protected internal virtual'
StockPrices.COMPANY: method get_COMPANY_TICKER should be 'public/protected virtual' or 'protected internal virtual'
StockPrices.COMPANY: method set_COMPANY_TICKER should be 'public/protected virtual' or 'protected internal virtual'
StockPrices.COMPANY: method get_ASSET_TYPE_ID should be 'public/protected virtual' or 'protected internal virtual'
StockPrices.COMPANY: method set_ASSET_TYPE_ID should be 'public/protected virtual' or 'protected internal virtual'
StockPrices.COMPANY: method get_IS_ACTIVE should be 'public/protected virtual' or 'protected internal virtual'
StockPrices.COMPANY: method set_IS_ACTIVE should be 'public/protected virtual' or 'protected internal virtual'
StockPrices.COMPANY: field _Id should not be public nor internal
StockPrices.COMPANY: field _COMPANY_NAME should not be public nor internal
StockPrices.COMPANY: field _COMPANY_TICKER should not be public nor internal
StockPrices.COMPANY: field _ASSET_TYPE_ID should not be public nor internal
StockPrices.COMPANY: field _IS_ACTIVE should not be public nor internal"

This message provides a few clues.  The messages seem to indicate that my class needs to use virtual properties (ala C#).  I also assume this to mean that my F# syntax does not yield virtual properties.

So, I need to poke around a find how to create virtual properties in F#

This is what I came up with:

-----------------------------------------------------------------------------------------------
    type COMPANY() = class
   
        let mutable _Id : int = 0
        let mutable _COMPANY_NAME : string = ""
        let mutable _COMPANY_TICKER : string = ""
        let mutable _ASSET_TYPE_ID : int = 0
        let mutable _IS_ACTIVE : int = 0

        abstract Id : int with get, set
        default x.Id with get() = _Id and set(v) = _Id <- v

        abstract COMPANY_NAME : string with get, set
        default x.COMPANY_NAME with get() = _COMPANY_NAME and set(v) = _COMPANY_NAME <- v

        abstract COMPANY_TICKER : string with get, set
        default x.COMPANY_TICKER with get() = _COMPANY_TICKER and set(v) = _COMPANY_TICKER <- v

        abstract ASSET_TYPE_ID : int with get, set
        default x.ASSET_TYPE_ID with get() = _ASSET_TYPE_ID and set(v) = _ASSET_TYPE_ID <- v
   
        abstract IS_ACTIVE : int with get, set
        default x.IS_ACTIVE with get() = _IS_ACTIVE and set(v) = _IS_ACTIVE <- v

    end
-----------------------------------------------------------------------------------------------

It is very similar to my class above, however, it uses the keyword 'abstract' to create an abstract property.  The 'default' keyword (replacing the member keyword) then heads of the implementation of the property in the current class.

This is from MSDN:

"Properties can be abstract. As with methods, abstract just means that there is a virtual dispatch associated with the property. Abstract properties can be truly abstract, that is, without a definition in the same class. The class that contains such a property is therefore an abstract class. Alternatively, abstract can just mean that a property is virtual, and in that case, a definition must be present in the same class. Note that abstract properties must not be private, and if one accessor is abstract, the other must also be abstract."http://msdn.microsoft.com/en-us/library/dd483467(VS.100).aspx

If one were to refer to a POCO class in F#, this would probably be along the lines you would expect.

OK, let's give this puppy a twirl!

Kaboom!

I crash again on the same line as before.

This is my error:

NHibernate.InvalidProxyTypeException was unhandled
  Message="The following types may not be used as proxies:
StockPrices.COMPANY: field _Id should not be public nor internal
StockPrices.COMPANY: field _COMPANY_NAME should not be public nor internal
StockPrices.COMPANY: field _COMPANY_TICKER should not be public nor internal
StockPrices.COMPANY: field _ASSET_TYPE_ID should not be public nor internal
StockPrices.COMPANY: field _IS_ACTIVE should not be public nor internal"

Shorter, but still a problem.  At least I have gotten rid of the 'virtual property' errors and I am now left with a bunch of errors that seem to say that my private variable placeholders are illegal.  I find this odd, as I do not get the same message with this type of syntax in VB:

-------------------------------------------------------------------------

Option Explicit On

Namespace StockPrices

    Public Class COMPANY

        Private _ID As Integer
        Private _CompanyName As String
        Private _CompanyTicker As String

        Public Overridable Property Id() As Integer

            Get
                Id = _ID
            End Get

            Set(ByVal value As Integer)
                _ID = value
            End Set

        End Property

        Public Overridable Property COMPANY_NAME() As String

            Get
                COMPANY_NAME = _CompanyName
            End Get

            Set(ByVal value As String)
                _CompanyName = value
            End Set

        End Property

        Public Overridable Property COMPANY_TICKER() As String

            Get
                COMPANY_TICKER = _CompanyTicker
            End Get

            Set(ByVal value As String)
                _CompanyTicker = value
            End Set

        End Property

    End Class

End Namespace

-------------------------------------------------------------------------

The above outline for a class works fine with Fluent NHibernate.

What to do?

Well, I know my class would be OK if I could just get rid of the proxy errors.  I mean these variables should be irrelevant, no?

So, I found a way to suppress them:

properties.Add("use_proxy_validator", "false")

I just need to add the above line to my properties collection.  This kills the proxy validator.

I know this could have unknown repercussions, so if anyone knows a legitimate way around this problem, I would sure like to know.

Low and behold, this actually works.

I get exactly what I expect!

My output:

-------------------------------------------------------------------------

NHibernate: SELECT company0_.Id as Id0_0_, company0_.IS_ACTIVE as IS2_0_0_, company0_.ASSET_TYPE_ID as ASSET3_0_0_, company0_.COMPANY_TICKER as COMPANY4_0_0_, company0_.COMPANY_NAME as COMPANY5_0_0_ FROM [COMPANY] company0_ WHERE company0_.Id=@p0;@p0 = 100
Company Name: AT&T,  Ticker: T

-------------------------------------------------------------------------

 We are now good!

Print | posted @ Tuesday, October 13, 2009 4:44 PM

Comments on this entry:

Gravatar # re: F# - Fluent NHibernate - POCO Class Object
by Tony at 10/13/2009 7:38 PM

Any way that you can give us a link to the complete source code zipped with a Visual Studio solution?

Thanks for you good work,
Tony
  
Gravatar # re: F# - Fluent NHibernate - POCO Class Object
by Steve at 10/14/2009 12:47 AM

Have you looked at your class in Reflector? I suspect that you will find your backing fields are default public; and setting them as private fields like this

[<DefaultValue(true)>]
val mutable private _Id : int

would avoid having to suppress the visibiity warnings.
  
Gravatar # re: F# - Fluent NHibernate - POCO Class Object
by pete w at 10/14/2009 11:27 AM

If you use "default-lazy = false, then there is no need for the check for virtual properties.

You need to understand what this does, however. If a class does not have the virtual qualifiers, then NHibernate cannot make a dynamic proxy of the class. If NHibernate cannot make a dynamic proxy, then the class cannot be lazy-loaded.

This can potentially result in a massive load of queries generated for every object up an association tree with eager fetching, thereby hammering your database if you are not careful.
  
Gravatar # re: F# - Fluent NHibernate - POCO Class Object
by Chris Bilson at 10/27/2009 9:07 AM

I ran into a similar problem. When I look at the compiled assembly in reflector, the f# compiler seems to always generate _internal_ fields instead of private, which is what I want when I specify private and it's what NHibernate is complaining about. The only solution seems to be turning off proxy validation.
  
Gravatar # re: F# - Fluent NHibernate - POCO Class Object
by simi at 12/30/2009 2:23 AM

hi,

First of all. Thanks very much for your useful post.

I just came across your blog and wanted to drop you a note telling you how impressed I

was with the information you have posted here.

Please let me introduce you some info related to this post and I hope that it is useful

for .Net community.

There is a good C# resource site, Have alook

http://www.csharptalk.com/2009/09/c-class.html
http://www.csharptalk.com

simi
  
Gravatar # re: F# - Fluent NHibernate - POCO Class Object
by Seo agency uk at 4/14/2010 3:55 AM

Nice post thanks.
  
Gravatar # Your content is really useful
by dress at 7/15/2010 2:29 AM

2010 new styles A-line Wedding Dresses,Beach Wedding Dresses,Evening Dresses,Prom Dresses on sale
evening dresses
Prom dresses
wedding dresses
on best wedding dresses for 2009 and 2010. You can find latest collection of woman's dresses and casual dresses on this site
discount Prom dresses
  
Gravatar # shi
by fiwedding at 7/23/2010 3:13 AM

supply in stock and custom lace front wigs, full lace wigs, lace wigs, human hair wigs,
remy lace front wigs, cheap wigs, cheap, buy, celebrity
full lace wigs
lace wigs
lace wigs sale
lace front wigs
synthetic front lace wigs
A Famous Dresses Shop which sell directly Wedding Dresses, Evening Dress, Bridesmaid Dresses,Prom dresses
cheap wedding dresses
cheap evening dresses
cheap prom dresses
cheap evening dresses
cheap prom dresses
Elegant evening dresses are always associated with the brides and their bridesmaids.Shopping for evening dresses and your wedding dress in stylish bridal .....
  
Gravatar # re: F# - Fluent NHibernate - POCO Class Object
by mortgage calculator with taxes at 7/23/2010 3:47 AM

There is obviously a lot to know about the way to use an F# Class (instead of C#) with Fluent NHibernate. I think you made some good points in Features also.
  
Gravatar # re: F# - Fluent NHibernate - POCO Class Object
by SEO Services India at 7/27/2010 11:30 AM

This looks absolutely perfect. All these tiny details are made with lot of background knowledge.
I like it a lot.
  
Gravatar # re: F# - Fluent NHibernate - POCO Class Object
by amylei at 7/30/2010 2:21 AM

www.topsalewatches.com/bvlgari-watches-47.html
www.topsalewatches.com/...noswiss-watches-409.html
  
Gravatar # re: F# - Fluent NHibernate - POCO Class Object
by ckangel3 at 7/30/2010 11:33 PM


mous Tiffany Jewelry Shop which sell directly Tiffany Rings, Earrings, Necklaces, Pendants, Bracelets,
Bangles, Accessories.
Tiffany co jewelry
Tiffany
Tiffany Bracelets
affordable tiffany jewelry, beautiful discount tiffany rings, tiffany necklaces,tiffany Pendants,
tiffany earrings and tiffany Bracelets.
Tiffany Charms
Tiffany Earrings
Tiffany Necklaces
Tiffany Rings
Tiffany Jewelry Online,Discount Tiffany & Co Jewelry On Sale,you can buy cheap Tiffany silver.
All jewelry come with Tiffany package
links of london
links london
links of london jewellery

  
Gravatar # re: F# - Fluent NHibernate - POCO Class Object
by STACIVargas at 8/4/2010 2:18 AM

Every one understands that life seems to be expensive, nevertheless different people require money for various things and not every one earns enough cash. Therefore to get fast credit loans and just student loan should be good solution.
  
Gravatar # re: F# - Fluent NHibernate - POCO Class Object
by DR at 8/4/2010 7:33 PM

With the development of the society,Louboutin Pumps And Christian Louboutin Sale give us new concept to the fashion world, why not to take the one for your lover, I believe that she not only love the Christian Louboutin Sandals, but also Adidas Shoes .
  
Gravatar # re: F# - Fluent NHibernate - POCO Class Object
by Supra TK Society Black White at 8/7/2010 12:41 AM

Supra Thunder Hightop Black, Supra Thunder Hightop Black




Supra Thunder Hightop White Black, Supra Thunder Hightop White Black




Supra Thunder Hightop Brown White, Supra Thunder Hightop Brown White



  
Gravatar # re: F# - Fluent NHibernate - POCO Class Object
by search engine optimization compa at 8/9/2010 10:31 AM

that you can give us a link to the complete source code zipped with a Visual Studio solution?
  
Gravatar # re: F# - Fluent NHibernate - POCO Class Object
by TonyaStone24 at 8/11/2010 5:23 AM

This is what I was searching for a long time! Appreciate for this article about school! Once somebody state that In union there is effect. Our powerfully trained service can support you in writing buy term paper.
  
Gravatar # re: F# - Fluent NHibernate - POCO Class Object
by Gardner31Lilian at 8/11/2010 5:59 AM

At this time men have an opportunity to use the buy thesis services , which should write hot format thesis relating with this topic. But I advice to determine the professional dissertation writing service to buy a thesis in.
  
Gravatar # re: F# - Fluent NHibernate - POCO Class Object
by Mortgage Short Sales at 8/13/2010 6:30 AM

I came lately to your website and have been reading along. I thought I would leave my initial comment. Keep writing, cause your posts are impressive! Doesn't it take up a lot of time to keep your blog so fascinating?
  
Gravatar # re: F# - Fluent NHibernate - POCO Class Object
by FHA Home Loan at 8/13/2010 6:33 AM

Pretty good post. I just stumbled upon your blog and wanted to say that I have really enjoyed reading your blog posts. Any way I will be subscribing to your feed and I hope you post again soon.
  
Gravatar # re: F# - Fluent NHibernate - POCO Class Object
by Luisa28Cross at 8/13/2010 9:00 PM

Different students should treat thesis example about this good post properly, because they need that a buy thesis service in future.
  
Gravatar # re: F# - Fluent NHibernate - POCO Class Object
by search engine optimization servi at 8/14/2010 1:38 AM

If a class does not have the virtual qualifiers, then NHibernate cannot make a dynamic proxy of the class. If NHibernate cannot make a dynamic proxy, then the class cannot be lazy-loaded.
  
Gravatar # re: F# - Fluent NHibernate - POCO Class Object
by lawyers wollongong at 8/17/2010 6:17 AM

lawyers wollongong
  
Gravatar # Moroccan furniture
by Moroccan furniture at 8/17/2010 6:31 PM

I was searching the net and finally i ended up in the nice post. Proud to be that i have gained some knowledge by reading the informative post.
  
Gravatar # re: F# - Fluent NHibernate - POCO Class Object
by Indian Medical Tourism at 8/18/2010 12:54 PM

Thanks for such informative and educative post. This is really very helpful.
  
Gravatar # wty
by cosplay at 8/25/2010 8:51 PM

The Lingerie Store,The lingerie and nightwear SALE at Style Lingerie. All lingerie sale garments marked 30% to 70% off.
Sexy lingerie, ladies underwear and designer nightwear
lingeri shop
Bridal lingerie
sexy lingerie
Lingerie, sleepwear and intimate apparel is our specialty, ranging from sexy lingerie to bridal lingerie,
including corset, bras, thongs and stockings.
lingerie sale
canon thermos travel mug,canon lens 24-105 mug,canon lens 70-200 mug
mugs shop
Canno Lens Mug
Canno Lens Coffee Mug
Nikon Lens Coffee Mug
Lens Coffee Mug
Canno Lens Coffee Mug, Ceramic Mugs,Nikon Lens mugs,canon thermos travel.Best Discount Mugs provider.
  
Gravatar # re:blu-raydiscripper
by blu-ray disc ripper at 8/26/2010 3:00 AM

Enjoy the software and enjoy your life.


blu-ray disc ripper || blu-ray dvd ripper || blu-ray copy software || blu-ray copy || mac blu-ray ripper || blu-ray ripper for mac || rip blu ray for mac

  
Gravatar # re: F# - Fluent NHibernate - POCO Class Object
by GarrettGlenda at 8/26/2010 4:57 AM

Thank you very much for the nice topic about this good post. That is worth to buy essays about this good post.
  
Gravatar # re: F# - Fluent NHibernate - POCO Class Object
by soccerisrealfutbol at 8/26/2010 5:19 AM

Your blogs has lots of information, thank you.
buy phentermine cheap
phentermine 37.5 mg cheap
  
Gravatar # re: F# - Fluent NHibernate - POCO Class Object
by Mutter witze at 8/27/2010 4:28 PM

Thank you for the realy good post
  
Gravatar # re: F# - Fluent NHibernate - POCO Class Object
by replica handbags at 8/28/2010 7:22 AM

Thank you very much for the nice topic about this good post. Thank you very much for the nice topic about this good post.
  
Gravatar # re: F# - Fluent NHibernate - POCO Class Object
by Funeral Insurance at 8/29/2010 11:18 PM

By learning these technologies, you open up so much more possibilities than if you narrow yourself to a select few set of components.
  
Gravatar # re: F# - Fluent NHibernate - POCO Class Object
by Cotton Yarn Manufacturer at 8/30/2010 1:14 AM

That is a pretty interesting post. Thanks for the info. such a very great post.
  
Gravatar # re: F# - Fluent NHibernate - POCO Class Object
by Cheap Boots at 8/30/2010 1:34 AM

Good points in your post, you have a great blog here. Thanks for this information.
  
Gravatar # re: F# - Fluent NHibernate - POCO Class Object
by Motorcycle Clothing at 8/30/2010 1:47 AM

I truly enjoyed this. It has been extremely informative as well as useful.thanks for sharing the information.
  
Gravatar # re: F# - Fluent NHibernate - POCO Class Object
by quality inspection china at 8/30/2010 1:56 AM

Its a very good post. I was very pleased to find this site. I wanted to thank you for this great read.
  
Gravatar # nike Air Force 1 Low
by nike Air Force 1 Low at 9/1/2010 6:29 PM

Nike Air Force 1 Low Shoes9
  
Gravatar # timberland shoe company
by timberland for you at 9/1/2010 8:21 PM

On a certain cheap timberland boots day at a certain hour, we will pull into the station. Bands will be playing and flags discount timberland boots waving. Once we get there, so many wonderful timberland winter boots dreams will come true and the pieces of our lives will fit together like a completed jigsaw puzzle. How restlessly we pace the aisles, womens timberland boot the minutes for loitering --waiting, waiting, waiting for the station.But uppermost in our timberland shoes store minds is the final destination. On a certain day at a certain hour, we will pull into the station. Bands will be playing and timberland eye boat flags waving. Tucked away in our timberland for you subconscious is an idyllic vision. We see ourselves on a long trip that timberland 6 inch spans the continent. We are traveling by train. Out timberland hiking boots windows, we drink in the passing scene of cars on nearby highways, of children timberland shoe company waving at a crossing, of cattle grazing on a distant timberland boots hillside, of smoke pouring from a power plant, of row upon row of corn and wheat, of flatlands and timberland wheat shoes valleys, of mountains and rolling classic 3 eye timberland boat hillsides, of city skylines and village halls.But uppermost in our black timberland boots minds is the final destination.
  
Gravatar # re: F# - Fluent NHibernate - POCO Class Object
by supra shoes at 9/2/2010 1:08 AM

Welcome to buy Supra Shoes, supra sneakers enjoy high discount and free shipping. Supra Vaider is 49% off. supra skate shoes are one of the most popular Supra Footwear.

  
Gravatar # re: F# - Fluent NHibernate - POCO Class Object
by abcpharmacy at 9/2/2010 4:18 AM

Great information, it has lots of learning.

online pharmacy no prescription
online pharmacy no prescription needed
  
Gravatar # re: F# - Fluent NHibernate - POCO Class Object
by nannan at 9/3/2010 12:37 AM

I pass the arguments: a start date, an end date, and a ticker ID. In this case I use the start date of 01/10/1990, the end date is today ( the implicit function DateTime.Today returns today). Again, note that I have to enclose my Convert.ToDateTime function in parentheses because it is a function callTiffany jewellery
Tiffany
Tiffany & Co
Tiffany Co Bracelets
Tiffany Co Charms
Tiffany Co Earrings
Tiffany sale
Tiffany Co Necklaces
Tiffany uk
Tiffany Co Rings
tiffany jewelry
tiffany co
  

Your comment:

Title:
Name:
Email:
Website:
 
Italic Underline Blockquote Hyperlink
 
 
Please add 1 and 4 and type the answer here: