ID Based Inventory with Inheritance

I’ve made inventory systems in the past, but they were often make-shift, and not ‘ethical’. I’m trying a different approach with inheritance. Here is the scenario: I have a database script to keep track of all the items, however I have a separate class ‘Item’ that all items are derived from. At the moment, I only have one class that derives from Item, ‘Weapon’. My question is: How can I create a list/array/dictionary in the database class to keep track of all of the items? When I attempt to keep a list of 'Item’s, I cannot get any fields from within ‘Weapon’. How can I solve this?

Item class:

public class Item {

	//DataBase Preference
	public int id;
	public string name;
	public int maxStack;

	//Instantiatee Preference
	public int currentStack;

	//Constructor
	public Item( int iId, string iName, int iMaxStack ) {
		id = iId;
		iName = name;
		iMaxStack = maxStack;
	}
}

Weapon class:

public class Weapon : Item {

//Preference Variables
public int damage;

//Constructor
public Weapon( int iId, string iName, int iMaxStack, int iDamage ) : base( iId, iName, iMaxStack ) {
	damage = iDamage;
}

}

Excerpt from database class:

	items.Add( new Item( 1, "misc", 32 ) );//This is items[0]
	items.Add( new Weapon( 99, "sword", 1337, 69 ) );//This is items[1]
	LogSystem.Log( items[0].name );//Valid
	LogSystem.Log( items[1].name );//Valic
	LogSystem.Log( items[1].damage );//CANNOT DO THIS. HOW CAN I?

Just 5 hours before your question someone else posted this one. You should read my answer over there.