Sunday, January 16, 2011

EloqueraDB is awesome

First off: I am not affiliated with EloqueraDB in any way. I am just a fan of great software and I love writing great software that help people get more done.

It does SQL
I feel fully confident in saying that SQL is the greatest DSL ever for data handling. Period. (A bit out of context but still). Also, It does LINQ. Chose what you want.
Just download the DesktopProject.zip and see the sheer simplicity.

You can embedded it in your application
Copy the two dlls and one exe. Reference them and go.
And if you want to go client server you get get password protected server access. Best of both worlds!


Is up to date
It is available for .NET framework 4. Means I can depend on it taking full advantage of any performance improvements in .NET 4 vs. .NET 3.5 and saves me from additional .NET 4 only installed testing.

Dynamic
You can store dynamic objects. Eloquera DB is selling this as a key differentiator and it is. It makes so many things so easier. Combine this with SQL and dynamic applications are so much simpler.

Its free for non commerical
License. If you need a quick and dirty inhouse tool with data storage. It does not get any simpler than EloqueraDB. Also commercial support is available. It is actually free for commercial as well. But if you use it in a commercial application be nice and buy it.

Simplicity
Check out the sample DesktopApplication that you can download as a zip file from their website. Simple.

Integrates nicely into MVVM. WPF applications can truly be a cinch!
This is perhaps what I love the most. You can use it as a simple ( yet highly queryable ) datastore for  your models. You just make the models implementing INotifyPropertyChanged and have properties that are themselves complex types and just serialize the complete object graph to disk. Here's the DesktopSample silghtly modified to serialize and deserialize an ObservableCollection :

using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Linq;
using Eloquera.Client;
using System.Collections.ObjectModel;

namespace DesktopProject
{
    public class SampleClass
    {
        public int Value { get; set; }
        public string Tag { get; set; }
        public ObservableCollection<string> ObservableCollectionTest { get; set; }
    }

    class Program
    {
        public static void Main(string[] args)
        {
            const string dbName = "SampleDb";

            var DatabasePath = Environment.CurrentDirectory;

            var db = new DB("server=(local);options=none;");

            db.DeleteDatabase(dbName, true);
            db.CreateDatabase(dbName);
            db.OpenDatabase(dbName);

            // Insert your code here

            // Sample LINQ query
            db.Store(new SampleClass() { Value = 123, Tag="Hello " });
            db.Store(new SampleClass() { Value = 124, Tag="Goodbye " });
            db.Store(new SampleClass() { Value = 123, Tag = "World!", ObservableCollectionTest = new ObservableCollection<string>() { "","I","do","lists","too"} });

            var result = from SampleClass sample in db where sample.Value == 123 select sample;



            foreach(var item in result)
            {
                Console.Write(item.Tag);      
                if (item.ObservableCollectionTest!=null)
                    foreach(var listitem in item.ObservableCollectionTest)
                    {
                        Console.WriteLine(listitem);
                    }
            }

            Console.WriteLine();

            // End of sample LINQ query

            db.Close();
        }
    }
}

A time saver. A life saver.

Great Documentation
http://eloquera.com/help/ One of the best i've seen.

An active google group
An active and functional news group by the eloquera team http://groups.google.com/group/eloquera .


I wish this company all the best. It is a breath of fresh air.

Enjoy!