private void writePowierzchniaToDB(ModelBundle modelDataBundle) { Model2D model = modelDataBundle.models[0]; //każda paczka zawiera tylko jeden model int newModelId = 0; modelIdsAfterRestoreDict.TryGetValue(model.idModel, out newModelId); model.setNewModelIdInPowierzchnia(newModelId); uint maxPowId = 0; string tableName = dbConnector.getTableNameFromQuery(SqlQueries.getPowierzchnieNoBlob); for (int i = 0; i < model.powierzchnieList.Count; i++) { ModelPowierzchnia pow = model.powierzchnieList[i]; dbWriter.writeBulkDataToDB(pow.powDataTable, tableName); if (i == 0) //analogicznie jak w przypadku wpisywania deklaracji modeli, po dodaniu pierwszej powierzchni odczytuję jej ID z bazy { maxPowId = getMaxPowierzchniaIdFromDB(); } else //kolejne ID tworzę sam { maxPowId++; } //w każdej powierzchni, w danych składowych tj trójkątów, punktów itd zmieniam ID powierzchni na nowy, w nowej bazie danych pow.idPow = maxPowId; //mając id aktualizuję PowObrys dbWriter.executeQuery("Update DefPowierzchni set PowObrys = '" + pow.powObrys + "'" + SqlQueries.getPowierzchnie_byIdPowFilter + pow.idPow); //zapisuję dane szczegółowe każdej powierzchni do bazy, tj. punkty, trójkąty itd //writePowierzchniaDataToDB(pow); } }
//w pliku zapisane są ciągiem pary: deklaracja długości danych(4 bajty) + buffer zawierający dane private void writeModelsToFile(string fileName) { string fileSaveDir = currentPath; if (fileName == null || fileName == "") { fileName = "modele.bin"; } else { fileName += ".bin"; } string serializationFile = Path.Combine(fileSaveDir, fileName); initializeFile(serializationFile); int modelsTotal = selectedModelDeclarations.Count; //do paska postępu for (int k = 0; k < modelsTotal; k++) { Model2D model = selectedModelDeclarations[0]; showProgress(k + 1, modelsTotal, model.nazwaModel.ToString()); readPowierzchniaFromDB(model); addModelToFile(serializationFile, model); selectedModelDeclarations.Remove(model); } }
//czyta tylko z tablicy DefModel2D, dane zostaną dodane później do każdego modelu osobno i będą dopisywane do pliku osobno //dane z tej metody będą użyte do odtworzenia struktury, do której następnie będą iteracyjnie dopisane dane private void readSelectedModelDeclarationsFromDB(string selectedModelIds) { string queryFilter = SqlQueries.getModelsByIdFilter.Replace("@iDs", selectedModelIds); QueryData modelData = readModelsFromDB(queryFilter); List <object[]> models = modelData.getQueryData(); List <string> paramTypes = modelData.getDataTypes(); for (int i = 0; i < models.Count; i++) { object[] model = models[i]; Model2D model2D = new Model2D(); model2D.czyArch = model[SqlQueries.getModels_czyArchIndex]; model2D.czyArch_dataType = paramTypes[SqlQueries.getModels_czyArchIndex]; model2D.dataModel = model[SqlQueries.getModels_dataModelIndex]; model2D.dataModel_dataType = paramTypes[SqlQueries.getModels_dataModelIndex]; model2D.directoryId = model[SqlQueries.getModels_directoryIdIndex]; model2D.directoryId_dataType = paramTypes[SqlQueries.getModels_directoryIdIndex]; model2D.idModel = model[SqlQueries.getModels_idModelIndex]; model2D.idModel_dataType = paramTypes[SqlQueries.getModels_idModelIndex]; model2D.idUzytk = model[SqlQueries.getModels_idUzytkIndex]; model2D.idUzytk_dataType = paramTypes[SqlQueries.getModels_idUzytkIndex]; model2D.idUzytkWlasciciel = model[SqlQueries.getModels_idUzytkWlascicielIndex]; model2D.idUzytkWlasciciel_dataType = paramTypes[SqlQueries.getModels_idUzytkWlascicielIndex]; model2D.nazwaModel = model[SqlQueries.getModels_nazwaModelIndex]; model2D.nazwaModel_dataType = paramTypes[SqlQueries.getModels_nazwaModelIndex]; model2D.opisModel = model[SqlQueries.getModels_opisModelIndex]; model2D.opisModel_dataType = paramTypes[SqlQueries.getModels_opisModelIndex]; ModelDirectory modelDir; directoryTreeControl1.checkedDirectories.TryGetValue(model2D.directoryId.ToString(), out modelDir); model2D.modelDir = modelDir; selectedModelDeclarations.Add(model2D); } }
private void addModelToFile(string serializationFile, Model2D model) { ModelBundle modelDataBundle = new ModelBundle(); modelDataBundle.addModel(model); try { //serialize using (FileStream stream = new FileStream(serializationFile, FileMode.Open)) { MemoryStream originalMemoryStream = new MemoryStream(); MemoryStream compressedMemoryStream = new MemoryStream(); BinaryFormatter formatter = new BinaryFormatter(); formatter.Serialize(originalMemoryStream, modelDataBundle); using (GZipStream gzipStream = new GZipStream(compressedMemoryStream, CompressionMode.Compress)) { originalMemoryStream.WriteTo(gzipStream); originalMemoryStream.Close(); } byte[] buffer = compressedMemoryStream.ToArray(); int bufferSize = buffer.Length; compressedMemoryStream.Close(); using (BinaryWriter binWriter = new BinaryWriter(stream)) { stream.Position = stream.Length; binWriter.Write(bufferSize); //pierwsze 4 bajty binWriter.Write(buffer); } } } catch (OutOfMemoryException exc) { MyMessageBox.display(exc.Message + "\r\nwriteModelsToFile", MessageBoxType.Error); } }
private void readPowierzchniaFromDB(Model2D model) { DBReader dbReader = new DBReader(dbConnection); //najpierw potrzebuję jedynie utworzyć obiekty ModelPowierzchnia, potrzebuję do tego tylko niektóre dane string query = SqlQueries.getPowierzchnieDeclaration + SqlQueries.getPowierzchnie_byIdModelFilter + model.idModel; QueryData powierzchnieData = dbReader.readFromDB(query); List <string> paramTypes = powierzchnieData.getDataTypes(); for (int i = 0; i < powierzchnieData.getDataRowsNumber(); i++) { ModelPowierzchnia pow = new ModelPowierzchnia(); pow.idPow = powierzchnieData.getQueryData()[i][SqlQueries.getPowierzchnie_idPowIndex]; pow.idModel = powierzchnieData.getQueryData()[i][SqlQueries.getPowierzchnie_idModelIndex]; pow.idModel_dataType = paramTypes[SqlQueries.getPowierzchnie_idModelIndex]; pow.nazwaPow = powierzchnieData.getQueryData()[i][SqlQueries.getPowierzchnie_nazwaPowIndex]; pow.nazwaPow_dataType = paramTypes[SqlQueries.getPowierzchnie_nazwaPowIndex]; pow.powierzchniaData = powierzchnieData.getQueryData()[i]; pow.columnHeaders = powierzchnieData.getHeaders(); pow.columnDataTypes = powierzchnieData.getDataTypes(); //teraz w zależności od opcji czytam pełne dane powierzchni i zapisuję do DataTable if (saveModelOption == 0) { pow.powDataTable = dbReader.readFromDBToDataTable(SqlQueries.getPowierzchnieNoBlob + SqlQueries.getPowierzchnie_byIdPowFilter + pow.idPow); } else { pow.powDataTable = dbReader.readFromDBToDataTable(SqlQueries.getPowierzchnieFull + SqlQueries.getPowierzchnie_byIdPowFilter + pow.idPow); } //readPowierzchniaDataFromDB(pow); pow.powObrys = dbReader.readScalarFromDB("Select PowObrys from DefPowierzchni " + SqlQueries.getPowierzchnie_byIdPowFilter + pow.idPow).ToString(); model.addPowierzchnia(pow); } }
public void addModel(Model2D model) { models.Add(model); }