Я делаю приложение Windows store (8.1) в C# Xaml для создания карт с использованием Bing Maps для расширения C# с файлом mbtiles, я уже использовал проект Portable Basemap Сервер для работы, но теперь я пытаюсь получить доступ к данным в файле mbtiles самостоятельно с помощью SQLite.MBTiles db с SQLite в aC# windows store app
Мне удалось получить плитки из таких файлов в WPF, но я не знаю, как это сделать в проекте магазина Windows;
Мой код в WPF:
SQLiteConnection _sqlcon;
using (_sqlcon = new SQLiteConnection(String.Format("Data Source={0};Version=3;", "PATH_TO_MBTILES")))
{
_sqlcon.Open();
SQLiteCommand cmd = new SQLiteCommand(string.Format("SELECT tile_data FROM tiles WHERE tile_column={0} AND tile_row={1} AND zoom_level={2}", 2, 5, 3), _sqlcon);
object o = cmd.ExecuteScalar();
if (o != null)
{
byte[] c = (byte[])o;
using (MemoryStream stream = new MemoryStream(c))
{
BitmapImage bmp = new BitmapImage();
bmp.BeginInit();
bmp.CacheOption = BitmapCacheOption.OnLoad;
bmp.StreamSource = stream;
bmp.EndInit();
img.Source = bmp;
}
}
}
С этим кодом я получаю плитку в колонке 2 строки 5 и уровень масштабирования 3.
Но в окнах Маркете я получаю SQLiteException «не удалось открыть файл базы данных», когда я пытаюсь создать SQLiteConnection
с тем же файлом (я использую NuGet SQLITE-сеть и SQLite для среды выполнения Windows 8.1 расширения)
Мой код в Windows Store App:
SQLiteConnection _sqlcon;
using (_sqlcon = new SQLiteConnection(String.Format("Data Source={0};Version=3;", "PATH_TO_MBTILES"))) //SQLiteExeption here
{
SQLiteCommand cmd = new SQLiteCommand(string.Format("SELECT tile_data FROM tiles WHERE tile_column={0} AND tile_row={1} AND zoom_level={2}", 2, 5, 3), _sqlcon);
byte[] o = cmd.ExecuteScalar<byte[]>();
//etc...
}
отладчик из Visual Studio отправить меня в файл SQLite.cs из SQLITE внутрисетевых NuGet:
public SQLiteConnection (string databasePath, SQLiteOpenFlags openFlags, bool storeDateTimeAsTicks = false)
{
if (string.IsNullOrEmpty (databasePath))
throw new ArgumentException ("Must be specified", "databasePath");
DatabasePath = databasePath;
#if NETFX_CORE
SQLite3.SetDirectory(/*temp directory type*/2, Windows.Storage.ApplicationData.Current.TemporaryFolder.Path);
#endif
Sqlite3DatabaseHandle handle;
#if SILVERLIGHT || USE_CSHARP_SQLITE
var r = SQLite3.Open (databasePath, out handle, (int)openFlags, IntPtr.Zero);
#else
// open using the byte[]
// in the case where the path may include Unicode
// force open to using UTF-8 using sqlite3_open_v2
var databasePathAsBytes = GetNullTerminatedUtf8 (DatabasePath);
var r = SQLite3.Open (databasePathAsBytes, out handle, (int) openFlags, IntPtr.Zero);
#endif
Handle = handle;
if (r != SQLite3.Result.OK) {
throw SQLiteException.New (r, String.Format ("Could not open database file: {0} ({1})", DatabasePath, r));
}
_open = true; // Debugger Stops here !
StoreDateTimeAsTicks = storeDateTimeAsTicks;
BusyTimeout = TimeSpan.FromSeconds (0.1);
}
Я нашел много примеров mbtiles файлов, используемые в WPF, но ни один в окнах Маркет ,
Расширяются ли расширения SQLite для хранилища Windows для поддержки файлов MBTiles в качестве баз данных? Если да, то что я делаю неправильно?
Благодарим вас за сохранение сведений об исключении. –
Я добавил сообщение об исключении: «Не удалось открыть файл базы данных» –
Благодарим вас за сохранение других сведений об исключении (например, пути) в секрете. –