/// <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); }
/// <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; }
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; } }