C# [UWP] SQLite DB kann nicht erstellt oder editiert werden mit ".Net Native" in VS

agredo

Cadet 2nd Year
Registriert
Juni 2015
Beiträge
24
Hallo an alle,

ich habe ein Problem mit meiner SQLite Datenbank in meiner Karteikarten-App.

Wenn ich in Visual Studio in den Projekt-Eigenschaften "Mit .Net Native kompilieren" anwähle kompiliert mein Code im Relese Mode keine Datenbank.

Wenn "Mit .Net Native kompilieren" und "Code optimieren" angewählt ist, bekomme ich den Fehler:"Der Wert von "local" oder von Argument "DatabaseName" ist in diesem Anweisungszeiger nicht verfügbar und kann daher nicht ermittelt werden. Möglicherweise wurde er bei der Optimierung entfernt."
und
"Der Wert von "Filename" oder von Argument "destPath "ist in diesem Anweisungszeiger nicht verfügbar und kann daher nicht ermittelt werden. Möglicherweise wurde er bei der Optimierung entfernt." (in CreateDataBaseFromIntern())

Wenn Debug angewählt wird funktioniert auch alles.

Wird "Mit .Net Native kompilieren" und "Code optimieren" deaktiviert Funktioniert alles.

Jedoch wenn ich ein App-Packet erstellen möchte, wird keine appxupload Datei erstellt. Nach diesem Link https://social.msdn.microsoft.com/F...-file-due-to-x86txt-not-found?forum=wpdevelop muss aber "Mit .Net Native kompilieren" aktiviert sein.

Hat vielleicht jemand eine Lösung für mein sehr spezielles Problem?

Vielen Dank

Agredo

Code:
 private static string dataBasePath = string.Empty;

        private static string DatabasePath
        {
            get
            {
                if(string.IsNullOrEmpty(dataBasePath))
                {
                    dataBasePath = Path.Combine(ApplicationData.Current.LocalFolder.Path, "Database.sqlite");
                }

                return dataBasePath; 
            }
            set { dataBasePath = value; }
        }


        public static bool DatabaseExists(string DatabaseName)
        {
            IAsyncOperation<StorageFile> databaseFile = null;
            try
            {
                databaseFile = StorageFile.GetFileFromPathAsync(Path.Combine(ApplicationData.Current.LocalFolder.Path, "Database.sqlite"));
            }
            catch
            {

            }

            if(databaseFile.Status == AsyncStatus.Error)
            {
                return false;
            }
            else
            {
                return true;
            }
        }



        private static SQLiteConnection DatabaseConnection
        {    
            get
            {
                return new SQLiteConnection(new SQLitePlatformWinRT(), DatabasePath);
            }
        }

        public static void CreateDataBase()
        {
            //Create new Connection
            using (var dataBase = DatabaseConnection)
            {
                //dataBase.TraceListener = new DebugTraceListener();

                //create CardTables if not Exists
                dataBase.CreateTable<CardDBElement>();
                var info = dataBase.GetMapping(typeof(CardDBElement));

                dataBase.CreateTable<StackDBElement>();
                var info1 = dataBase.GetMapping(typeof(StackDBElement));

            }
        }

        public static void CreateDataBaseFromIntern()
        {
            string Filename = "Database.sqlite";
            string sourcePath = Path.Combine(Windows.ApplicationModel.Package.Current.InstalledLocation.Path, Filename);
            string destPath = Path.Combine(ApplicationData.Current.LocalFolder.Path, Filename);

            File.Copy(sourcePath, destPath);
        }
        public static TableMapping GetTableMapping(Type Table)
        {
            using (var dataBase = DatabaseConnection)
            {
               return dataBase.GetMapping(Table);
            }
        }

        public static void AddCardDBElement(CardDBElement Card)
        {
            using (var dataBase = new SQLiteConnection(new SQLitePlatformWinRT(), DatabasePath))
            {
                //dataBase.TraceListener = new DebugTraceListener();

                dataBase.Insert(Card);
            }
        }

Code:
public StackViewModel()
        {
            if(!DatabaseController.DatabaseExists("Database.sqlite"))
            {
                DatabaseController.CreateDataBaseFromIntern();
            }

            try
            {
                var List = DatabaseController.GetStackDBElements();

                for (int i = 0; i < List.Count; i++)
                {
                    StackList.Add(new Stack()
                    {
                        Name = List[i].StackName,
                        CardNumber = DatabaseController.GetCardDBElementsByStackID(List[i].Id).Count
                    });
                }
            }
            catch
            {

            }

        }
 
Zuletzt bearbeitet:
Zurück
Oben