private static int DetermineSize(ISqlItem item)
        {
            int size = 0;
            if (item.ItemType == SqlItemType.Column)
            {
                size = ((IDbColumn)item.Item).MaxLengthIfText;
            }
            else if (item.ItemType == SqlItemType.Parameter)
            {
                size = ((DbParameter)item.Item).Size;
            }
            else if (item.ItemType == SqlItemType.SubQuery)
            {
                SelectStatement query = (SelectStatement)item.Item;
                if (query.SelectList.Count > 0)
                    size = DetermineSize(query.SelectList[0]);
            }

            if (size == 0)
            {
                // Non-variable length types.
                return 0;
            }
            else if (size > 0 && size < 100)
            {
                // Round up to 100.
                return 100;
            }
            else
            {
                // Computed value.
                return size;
            }
        }
        private static DbType DetermineDbType(ISqlItem item)
        {
            DbType dbType = DbType.Object;
            if (item.ItemType == SqlItemType.Column)
            {
                dbType = ((IDbColumn)item.Item).DbType;
            }
            else if (item.ItemType == SqlItemType.Parameter)
            {
                dbType = ((DbParameter)item.Item).DbType;
            }
            else if (item.ItemType == SqlItemType.SubQuery)
            {
                SelectStatement query = (SelectStatement)item.Item;
                if (query.SelectList.Count > 0)
                    dbType = DetermineDbType(query.SelectList[0]);
            }

            return dbType;
        }