Retrieving by Accession Number
We are sometimes asked how to retrieve as study based on the accession number. This is only possible by doing an initial query to find the StudyUID then using those in a retrieval.
The explanation is that the DICOM rules allow only the Instance UID, Series UID, Study UID and Patient ID to be used in C-MOVE and C-GET requests. If you wish to retrieve a study based on accession number (or anything else except those 4 identifiers). Then you must first do a C-FIND query to identify the study or studies with that accession number then use the Study UID returned to you by the query to pass on to the subsequent retrieve request.
Note, Accession number is a STUDY level attribute so the code below will only work for STUDY level queries.
.NET Version
The method needed is DicomQuery.Find. You can generate a query dataset using the QueryDataSet method and add more query parameters to it.
DicomQuery q = new DicomQuery();
q.Node = "DicomServer.co.uk";
q.Port = 104;
q.CallingAE = "scu";
q.CalledAE = "DicomServer";
q.Root = QueryRoot.Study;
q.Level = QueryLevel.STUDY;
DicomDataSet queryDS = q.QueryDataSet();
queryDS.Add(Keyword.AccessionNumber, "12345");
queryDS.StudyUID = ""; // please return Study UID
DicomDataSetCollection results = q.Find(queryDS);
foreach (DicomDataSet result in results)
{
string studyUID = result.StudyUID;
// with Study UID obtained, you can either do further C-FIND queries to get Series/Instance UIDs
// or you can go ahead and retrieve the entire Study via C-GET or C-MOVE
}
COM Version
The method needed is DicomQuery.DoRawQuery, You can generate a default query dataset as a starting point, using the QueryDataSet method, and then add more query parameters to it:
Dim q As New DicomQuery
q.Node = "DicomServer.co.uk"
q.Port = 104
q.CallingAE = "scu"
q.CalledAE = "DicomServer"
q.Root = "STUDY"
q.level = "STUDY"
Dim queryDS As DicomDataSet
Set queryDS = q.QueryDataSet
queryDS.Attributes.Add &H8, &H50, "12345"
queryDS.studyUID = "" ' please return STUDY UID
Dim results As DicomDataSets
Set results = q.DoRawQuery(queryDS)
Dim result As DicomDataSet
For Each result In results
Dim studyUID As String
studyUID = result.studyUID
Next