public virtual ActionResult SaveGridData(string tableName, string postData, string databaseType)
        {
            if (tableName == null || postData == null)
            {
                return new EmptyResult();
            }
            var table = JsonConvert.DeserializeObject<string>(tableName);
            var saveData = JsonConvert.DeserializeObject<Dictionary<string, string>>(postData);
            var database = JsonConvert.DeserializeObject<WebISGDatabaseType>(databaseType);

            // Remove any data that does not have a corresponding database column
            saveData.Remove(table + "GridTable_id");
            saveData.Remove("id");
            saveData.Remove("oper");
            saveData.Remove("RowId");

            var metaData = WebCache.IsgMetaData.FirstOrDefault(x => string.Equals(x.Name, table, StringComparison.CurrentCultureIgnoreCase) && x.DatabaseType == database);
            var row = 
                new NeonDataTableRowMetaData
                {
                    Cells = new List<NeonDataTableCellMetaData>()
                };

            // ReSharper disable once LoopCanBePartlyConvertedToQuery
            foreach (var val in saveData)
            {
                if (metaData == null)
                {
                    continue;
                }
                var column = metaData.Columns.FirstOrDefault(col => string.Equals(col.Name, val.Key, StringComparison.CurrentCultureIgnoreCase));
                if (column == null)
                {
                    continue;
                }
                var cell = new NeonDataTableCellMetaData
                {
                    ColumnName = column.Name,
                    IsPrimaryKey = column.IsPrimaryKey,
                    TypeName = column.TypeName,
                    Value = val.Value
                };
                row.Cells.Add(cell);
            }
            // ReSharper disable once UnusedVariable
            var success = metaData != null && WebDataTable.SaveData((metaData.SourceName ?? tableName), row, database);

            // TODO: handle the success/failure?
            return new EmptyResult();
        }
 public static bool SaveData(string tableName, NeonDataTableRowMetaData row, WebISGDatabaseType databaseType)
 {
     try
     {
         using (var serviceClient = new NeonISGDataServiceClient(Configuration.ActiveNeonDataServiceEndpoint))
         {
             var neonDatabase = Mapper.Map<WebISGDatabaseType, NeonISGDatabaseType>(databaseType);
             // ReSharper disable once UnusedVariable
             var rtrn = serviceClient.SaveRow(tableName, row, neonDatabase);
         }
         return true;
     }
     catch (Exception ex)
     {
         throw new Exception(string.Format("Unable to save information to database for table {0}", tableName), ex);
     }
 }