Пример #1
0
        public void CommitChanges()
        {
/*
 * //			PopulateDatabase();
 *                      this.phrasebookTableAdapter.Update( MyDataSet );
 *                      this.cat2PhraseTableAdapter.Update( MyDataSet );
 *                      this.categoriesTableAdapter.Update( MyDataSet );
 */

            this.tableAdapterManager.UpdateAll(MyDataSet);
            MyDataSet.AcceptChanges();
        }
Пример #2
0
        internal static void UpdateCompositeInstance
        (
            MyDataSet compositeInstanceDataSet,
            DbConnection connection,
            MyUpdateTableDelegate updateTable
        )
        {
            try
            {
                DbTransaction DbTransaction = null;

                connection.Open();

                try
                {
                    try
                    {
                        MyDataSet.MyPatientTableRow  patientRow = compositeInstanceDataSet.Tables["MyPatientTable"].Rows[0] as MyDataSet.MyPatientTableRow;
                        MyDataSet.MyStudyTableRow    studyRow   = compositeInstanceDataSet.Tables["MyStudyTable"].Rows[0] as MyDataSet.MyStudyTableRow;
                        MyDataSet.MySeriesTableRow   seriesRow  = compositeInstanceDataSet.Tables["MySeriesTable"].Rows[0] as MyDataSet.MySeriesTableRow;
                        MyDataSet.MyInstanceTableRow dimageRow  = compositeInstanceDataSet.Tables["MyInstanceTable"].Rows[0] as MyDataSet.MyInstanceTableRow;

                        int?patientId = -1;
                        int?studyId   = -1;
                        int?seriesId  = -1;

                        // *************************
                        // Patient
                        // *************************
                        DbTransaction = connection.BeginTransaction();
                        UpdatePatientDataset(compositeInstanceDataSet,
                                             connection,
                                             DbTransaction,
                                             updateTable);
                        DbTransaction.Commit();

                        // Use the last generated PatientId -- if RowState is 'unchanged', nothing gets updated in the patientRow
                        // In this case, we need to read the patientId from the database
                        patientId = patientRow.PatientId;
                        if (patientId == -1)
                        {
                            patientId = GetIntValue(connection, "MyPatientTable", "patientId", "PatientIdentification", patientRow.PatientIdentification);
                        }

                        // *************************
                        // Study
                        // *************************
                        DbTransaction = connection.BeginTransaction();
                        if ((studyRow.RowState != DataRowState.Unchanged && studyRow.StudyPatientId == -1) && (patientId != null))
                        {
                            studyRow.StudyPatientId = patientId.Value;
                        }
                        UpdateStudyDataset(compositeInstanceDataSet,
                                           connection,
                                           DbTransaction,
                                           updateTable);
                        DbTransaction.Commit();

                        studyId = studyRow.StudyId;
                        if (studyId == -1)
                        {
                            studyId = GetIntValue(connection, "MyStudyTable", "studyId", "StudyStudyInstanceUID", studyRow.StudyStudyInstanceUID);
                        }

                        // *************************
                        // Series
                        // *************************
                        // Use the last generated StudyId
                        DbTransaction = connection.BeginTransaction();
                        if ((seriesRow.RowState != DataRowState.Unchanged && seriesRow.SeriesStudyId == -1) && (studyId != null))
                        {
                            seriesRow.SeriesStudyId = studyId.Value;
                        }
                        UpdateSeriesDataset(compositeInstanceDataSet,
                                            connection,
                                            DbTransaction,
                                            updateTable);
                        DbTransaction.Commit();

                        seriesId = seriesRow.SeriesId;
                        if (seriesId == -1)
                        {
                            seriesId = GetIntValue(connection, "MySeriesTable", "SeriesId", "SeriesSeriesInstanceUID", seriesRow.SeriesSeriesInstanceUID);
                        }

                        // *************************
                        // Instance
                        // *************************
                        // Use the last generated SeriesId
                        DbTransaction = connection.BeginTransaction();
                        if ((dimageRow.RowState != DataRowState.Unchanged && dimageRow.ImageSeriesId == -1) && (seriesId != null))
                        {
                            dimageRow.ImageSeriesId = seriesId.Value;
                        }
                        UpdateInstanceDataset(compositeInstanceDataSet,
                                              connection,
                                              DbTransaction,
                                              updateTable);

                        DbTransaction.Commit();
                    }
                    catch (Exception exception)
                    {
                        System.Diagnostics.Debug.Assert(false, exception.ToString());

                        DbTransaction.Rollback();

                        throw;
                    }
                }
                finally
                {
                    connection.Close();
                }

                compositeInstanceDataSet.AcceptChanges();
            }
            catch (Exception exception)
            {
                System.Diagnostics.Debug.WriteLine(exception.Message);
                System.Diagnostics.Debug.Assert(false);

                throw;
            }
        }
Пример #3
0
        // Returns a DataSet that reflects the existence of PatientID, StudyInstanceUID, SeriesInstanceUID, and SOPInstanceUID
        // * If the patient does not exist, returns an empty DataSet
        // * If patient exists but no study returns a DataSet where MyPatientTable has row with PatientID of DicomDataSet
        // * If patient exists, study exists but no series, returns a DataSet that has PatientID (MyPatientTable), and StudyInstanceUID (MyStudyTable)
        // * If patient, study, series exist but no Instance, returns a DataSet with PatientID, StudyInstanceUID, and SeriesInstanceUID
        // * If patinet, study series, instance exist, returns empty dataset
        private DataSet GetUpdateDataSet
        (
            DicomDataSet ds,
            bool updateExistentPatient,
            bool updateExistentStudy,
            bool updateExistentSeries,
            bool updateExistentInstances
        )
        {
            MatchingParameterCollection matchingEntitiesCollection = new MatchingParameterCollection();
            MatchingParameterList       matchingEntitiesList       = new MatchingParameterList();

            matchingEntitiesCollection.Add(matchingEntitiesList);

            MyInstance instance = new MyInstance();

            instance.SOPInstanceUID = ds.MyGetStringValue(DicomTag.SOPInstanceUID);

            bool instanceExists = IsCompositeInstancesExists(instance.SOPInstanceUID);

            if (instanceExists)
            {
                matchingEntitiesList.Add(instance);

                DeleteInstance(matchingEntitiesCollection);

                matchingEntitiesList.Remove(instance);

                instanceExists = false;
            }


            MyPatient patient = new MyPatient();

            patient.PatientIdentification = ds.MyGetStringValue(DicomTag.PatientID);

            if (null != patient.PatientIdentification)
            {
                matchingEntitiesList.Add(patient);
            }

            bool patientExist = IsPatientsExists(patient.PatientIdentification);

            if (updateExistentPatient && patientExist)
            {
                // case #1
                return(QueryCompositeInstances(matchingEntitiesCollection));
            }
            else if (!patientExist)
            {
                // case #2
                return(new MyDataSet());
            }
            else
            {
                // case #3
                // (!updateExistentPatient) && (patientExist)
                // int ? patientId = GetIntValue(patient.PatientIdentification);

                MyStudy study = new MyStudy();
                study.StudyStudyInstanceUID = ds.MyGetStringValue(DicomTag.StudyInstanceUID);

                if (null != study.StudyStudyInstanceUID)
                {
                    matchingEntitiesList.Add(study);
                }

                bool studyExists = IsStudyExists(study.StudyStudyInstanceUID);

                if (updateExistentStudy && studyExists)
                {
                    return(QueryCompositeInstances(matchingEntitiesCollection));
                }
                else if (!studyExists)
                {
                    if (matchingEntitiesList.Contains(study))
                    {
                        matchingEntitiesList.Remove(study);
                    }

                    return(QueryPatients(matchingEntitiesCollection));
                }
                else
                {
                    MySeries series = new MySeries();

                    series.SeriesSeriesInstanceUID = ds.MyGetStringValue(DicomTag.SeriesInstanceUID);

                    if (!string.IsNullOrEmpty(series.SeriesSeriesInstanceUID))
                    {
                        matchingEntitiesList.Add(series);
                    }

                    bool seriesExists = IsSeriesExists(series.SeriesSeriesInstanceUID);

                    if (updateExistentSeries && seriesExists)
                    {
                        return(QueryCompositeInstances(matchingEntitiesCollection));
                    }
                    else if (!seriesExists)
                    {
                        if (matchingEntitiesList.Contains(series))
                        {
                            matchingEntitiesList.Remove(series);
                        }

                        return(QueryStudies(matchingEntitiesCollection));
                    }
                    else
                    {
                        if (!string.IsNullOrEmpty(instance.SOPInstanceUID))
                        {
                            matchingEntitiesList.Add(instance);
                        }

                        if (updateExistentInstances && instanceExists)
                        {
                            return(QueryCompositeInstances(matchingEntitiesCollection));
                        }
                        else
                        {
                            MyDataSet.MyPatientTableRow patientRow;
                            MyDataSet.MyStudyTableRow   studyRow;
                            MyDataSet.MySeriesTableRow  seriesRow;

                            MyDataSet myDataSet = new MyDataSet();
                            myDataSet.EnforceConstraints = false;
                            myDataSet.MyPatientTable.BeginLoadData();
                            myDataSet.MyStudyTable.BeginLoadData();
                            myDataSet.MySeriesTable.BeginLoadData();
                            myDataSet.MyInstanceTable.BeginLoadData();

                            patientRow = myDataSet.MyPatientTable.AddMyPatientTableRow(patient.PatientIdentification,
                                                                                       string.Empty,
                                                                                       DateTime.MinValue,
                                                                                       string.Empty,
                                                                                       string.Empty);

                            //if (patientId != null)
                            //{
                            //   patientRow.PatientId = patientId.Value;
                            //}

                            //dicomDataSet.MyPatientTable.Rows[0]["PatientId"] = patientId;

                            studyRow = myDataSet.MyStudyTable.AddMyStudyTableRow(patientRow,
                                                                                 study.StudyStudyInstanceUID,
                                                                                 DateTime.MinValue,
                                                                                 string.Empty,
                                                                                 string.Empty,
                                                                                 string.Empty,
                                                                                 string.Empty);

                            seriesRow = myDataSet.MySeriesTable.AddMySeriesTableRow(
                                studyRow,
                                series.SeriesSeriesInstanceUID,
                                string.Empty,
                                0,
                                string.Empty,
                                DateTime.MinValue,
                                string.Empty);

                            //1. if updateInstance and instance exist not valid (will be in the above IF
                            //2. if updateInstance and instance NOT exist don't fill from Db
                            //3. if NOT updateInstance and instance exist then insert SOP Instance UID
                            //4. if NOT updateInstnace and NOT instance exist then don't fill from Db

                            //case 3 above
                            if (instanceExists)
                            {
                                myDataSet.MyInstanceTable.AddMyInstanceTableRow(seriesRow,
                                                                                instance.SOPInstanceUID,
                                                                                0,
                                                                                DateTime.MinValue,
                                                                                string.Empty,
                                                                                string.Empty,
                                                                                0,
                                                                                0,
                                                                                0);
                            }

                            myDataSet.AcceptChanges();

                            myDataSet.MyPatientTable.EndLoadData();
                            myDataSet.MyStudyTable.EndLoadData();
                            myDataSet.MySeriesTable.EndLoadData();
                            myDataSet.MyInstanceTable.EndLoadData();
                            myDataSet.EnforceConstraints = true;
                            return(myDataSet);
                        }
                    }
                }
            }
        }