Exemple #1
0
        /// <summary>
        /// Adds a new row to the DataSet Study Table (MyInstanceTable) if the DicomDataSet SOPInstanceUID does not already exist
        /// </summary>
        /// <param name="ds">The Leadtools.Dicom.DicomDataSet that is being stored</param>
        /// <param name="instanceDataSet">The DataSet that contains the patient, study, series, and instance tables</param>
        /// <param name="updateExistentPatient">If 'true', update the existing patient with information from dicomDataSet</param>
        /// <param name="referencedFileName">Full path of the DICOM file</param>
        /// <param name="retrieveAe">retrieveAe">AE Title of the client doing the retrieval</param>
        private void FillInstancetData(DicomDataSet ds, MyDataSet instanceDataSet, bool updateExistentInstance, string referencedFileName, string retrieveAe)
        {
            string sopInstanceUID = ds.MyGetStringValue(DicomTag.SOPInstanceUID, AutoTruncate, instanceDataSet.MyInstanceTable.SOPInstanceUIDColumn.MaxLength);

            if (null == sopInstanceUID /*|| null == seriesInstanceUID*/)
            {
                return;
            }

            MyDataSet.MyInstanceTableRow instanceRow = null;
            DataRow[] rows = instanceDataSet.MyInstanceTable.Select(string.Format("SOPInstanceUID = '{0}'", sopInstanceUID));
            MyDataSet.MyInstanceTableRow[] seriesRows = (MyDataSet.MyInstanceTableRow[])rows;

            bool instanceFound = (null != instanceRow);

            if (!instanceFound)
            {
                instanceRow = instanceDataSet.MyInstanceTable.NewMyInstanceTableRow();

                instanceRow.SOPInstanceUID = sopInstanceUID;

                instanceDataSet.MyInstanceTable.AddMyInstanceTableRow(instanceRow);
            }
            else if (!updateExistentInstance)
            {
                return;
            }

            FillInstanceInformation(instanceRow,
                                    ds,
                                    instanceDataSet,
                                    sopInstanceUID,
                                    retrieveAe,
                                    referencedFileName,
                                    updateExistentInstance);
        }
Exemple #2
0
        /// <summary>
        /// If the ‘update’ parameter is true, replaces all the DataSet 'Instance' table information with the corresponding information from the DicomDataSet.
        /// </summary>
        /// <param name="instance">Row of the 'instance' table that is being udpated</param>
        /// <param name="ds">The Leadtools.Dicom.DicomDataSet that is being stored</param>
        /// <param name="instanceDataSet">The DataSet that contains the patient, study, series, and instance tables</param>
        /// <param name="sopInstanceUID">The SOPInstanceUID of the study row being udpated</param>
        /// <param name="retrieveAE">retrieveAe">AE Title of the client doing the retrieval</param>
        /// <param name="update">If 'true', updates the DataSet 'Instance' table information with the corresponding information from the DicomDataSet</param>
        /// <remarks>
        /// This method needs to change based on your schema.  For the MyDicomDb schema, we update all fields in the 'Instance' table
        /// <list>
        /// <item>InstanceNumber</item>
        /// <item>SOPClassUID</item>
        /// <item>Rows</item>
        /// <item>Columns</item>
        /// <item>BitsAllocated</item>
        /// <item>ImageLastStoreDate – Updated to current date</item>
        /// <item>ImageFilename – Full path to location where DicomDataSet is stored</item>
        /// </list>
        /// </remarks>
        private void FillInstanceInformation(MyDataSet.MyInstanceTableRow instance, DicomDataSet ds, MyDataSet instanceDataSet, string sopInstanceUID, string retrieveAE, string referencedFileName, bool update)
        {
            try
            {
                // InstanceNumber
                int?instanceNumber = ds.MyGetIntValue(DicomTag.InstanceNumber);
                if (CanSetValue(instanceNumber, update, instance, instanceDataSet.MyInstanceTable.ImageImageNumberColumn))
                {
                    instance.ImageImageNumber = instanceNumber.Value;
                }

                // ImageLastStoreDate
                MyDataSet.MyInstanceTableRow myInstanceRow = (MyDataSet.MyInstanceTableRow)instanceDataSet.MyInstanceTable.Rows[0];
                if (myInstanceRow.IsImageLastStoreDateNull())
                {
                    instance.ImageLastStoreDate = DateTime.Now;
                }

                // ImageFilename
                if (CanSetValue(referencedFileName, update, instance, instanceDataSet.MyInstanceTable.ImageFilenameColumn))
                {
                    instance.ImageFilename = referencedFileName;
                }

                // SOPClassUID
                string sopClassUid;
                sopClassUid = ds.MyGetStringValue(DicomTag.SOPClassUID, AutoTruncate, instanceDataSet.MyInstanceTable.ImageUniqueSOPClassUIDColumn.MaxLength);

                if (CanSetValue(sopClassUid, update, instance, instanceDataSet.MyInstanceTable.ImageUniqueSOPClassUIDColumn))
                {
                    instance.ImageUniqueSOPClassUID = sopClassUid;
                }

                // Rows
                int?imageRows = ds.MyGetIntValue(DicomTag.Rows);
                if (CanSetValue(imageRows, update, instance, instanceDataSet.MyInstanceTable.ImageRowsColumn))
                {
                    instance.ImageRows = imageRows.Value;
                }

                // Columns
                int?imageColumns = ds.MyGetIntValue(DicomTag.Columns);
                if (CanSetValue(imageColumns, update, instance, instanceDataSet.MyInstanceTable.ImageColumnsColumn))
                {
                    instance.ImageColumns = imageColumns.Value;
                }

                // BitsAllocated
                int?imageBitsAllocated = ds.MyGetIntValue(DicomTag.BitsAllocated);
                if (CanSetValue(imageBitsAllocated, update, instance, instanceDataSet.MyInstanceTable.ImageBitsAllocatedColumn))
                {
                    instance.ImageBitsAllocated = imageBitsAllocated.Value;
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }

            instance.ImageSeriesId = -1;
        }
Exemple #3
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;
            }
        }