public void SaveImage(int level, int row, int col, byte[] image)
{
try
{
//DbCommand cmd = _connection.CreateCommand();
//cmd.CommandText = String.Format("INSERT INTO {0} VALUES(@Level, @Col, @Row, @Image);","tiles");
using (var command = new SQLiteCommand(connection))
{
command.CommandText = string.Format(
CultureInfo.InvariantCulture,
@"SELECT [tile_data] FROM [tiles] WHERE zoom_level = {0} AND tile_column = {1} AND tile_row = {2};",
level, col, row);
var tileObj = command.ExecuteScalar();
if (tileObj != null)
{
return; // Tile already cached ...
}
}
using (var cmd = connection.CreateCommand())
{
cmd.CommandText = @"INSERT INTO tiles VALUES(@Level, @Col, @Row, @Image);";
var par = cmd.CreateParameter();
par.DbType = DbType.Int32;
par.ParameterName = "Level";
par.Value = level;
cmd.Parameters.Add(par);
var gRow = (int)((Math.Pow(2, level) - 1) - row);
par = cmd.CreateParameter();
par.DbType = DbType.Int32;
par.ParameterName = "Row";
par.Value = gRow;
cmd.Parameters.Add(par);
par = cmd.CreateParameter();
par.DbType = DbType.Int32;
par.ParameterName = "Col";
par.Value = col;
cmd.Parameters.Add(par);
par = cmd.CreateParameter();
par.DbType = DbType.Binary;
par.ParameterName = "Image";
par.Value = image;
cmd.Parameters.Add(par);
cmd.ExecuteNonQuery();
}
}
catch (SQLiteException e)
{
Logger.Log("MBTileCache", "Error adding tile", e.Message, Logger.Level.Error);
}
catch (Exception e)
{
Logger.Log("MBTileCache", "Error adding tile", e.Message, Logger.Level.Error);
}
}