Ejemplo n.º 1
0
        /*
         * Generates an SQL query based on the client's search parameters
         */
        private string GenerateMatchingQuery()
        {
            string       strSqlQuery       = "";
            string       strAttributeValue = "";
            DicomElement element;

            try
            {
                strSqlQuery = "SELECT * FROM MwlSCPTbl WHERE 1=1";

                // TAG_ACCESSION_NUMBER
                element = ds.FindFirstElement(null, DemoDicomTags.AccessionNumber, false);
                if (element != null)
                {
                    strAttributeValue = ds.GetStringValue(element, 0);
                    if ((strAttributeValue != null) && (strAttributeValue != ""))
                    {
                        // Wild Card Matching or Single Value Matching
                        if ((strAttributeValue.IndexOf('*') >= 0) || (strAttributeValue.IndexOf('?') >= 0))
                        {
                            // Wild card matching -- case insensitive
                            strSqlQuery += " And TAG_ACCESSION_NUMBER LIKE '" + PrepareForWCM(strAttributeValue) + "'";
                        }
                        else
                        {
                            // Single value matching -- case sensitive
                            strSqlQuery += " And TAG_ACCESSION_NUMBER = '" + strAttributeValue + "'";
                        }
                    }
                }

                // TAG_MODALITY
                element = ds.FindFirstElement(null, DemoDicomTags.Modality, false);
                if (element != null)
                {
                    strAttributeValue = ds.GetStringValue(element, 0);
                    if ((strAttributeValue != null) && (strAttributeValue != ""))
                    {
                        // Single value matching -- case sensitive
                        strSqlQuery += " And TAG_MODALITY = '" + FilterForSingleValueMatch(strAttributeValue) + "'";
                    }
                }

                // TAG_INSTITUTION_NAME
                element = ds.FindFirstElement(null, DemoDicomTags.InstitutionName, false);
                if (element != null)
                {
                    strAttributeValue = ds.GetStringValue(element, 0);
                    if ((strAttributeValue != null) && (strAttributeValue != ""))
                    {
                        // Wild Card Matching or Single Value Matching
                        if ((strAttributeValue.IndexOf('*') >= 0) || (strAttributeValue.IndexOf('?') >= 0))
                        {
                            // Wild card matching -- case insensitive
                            strSqlQuery += " And TAG_INSTITUTION_NAME LIKE '" + PrepareForWCM(strAttributeValue) + "'";
                        }
                        else
                        {
                            // Single value matching -- case sensitive
                            strSqlQuery += " And TAG_INSTITUTION_NAME = '" + strAttributeValue + "'";
                        }
                    }
                }

                // TAG_REFERRING_PHYSICIAN_NAME
                element = ds.FindFirstElement(null, DemoDicomTags.ReferringPhysicianName, false);
                if (element != null)
                {
                    strAttributeValue = ds.GetStringValue(element, 0);
                    if ((strAttributeValue != null) && (strAttributeValue != ""))
                    {
                        // Wild card matching -- case insensitive
                        strSqlQuery += " And TAG_REFERRING_PHYSICIAN_NAME LIKE '" + PrepareForWCM(strAttributeValue) + "'";
                    }
                }

                // TAG_PATIENT_NAME
                element = ds.FindFirstElement(null, DemoDicomTags.PatientName, false);
                if (element != null)
                {
                    strAttributeValue = ds.GetStringValue(element, 0);
                    if ((strAttributeValue != null) && (strAttributeValue != ""))
                    {
                        // Wild card matching -- case insensitive
                        strSqlQuery += " And TAG_PATIENT_NAME LIKE '" + PrepareForWCM(strAttributeValue) + "'";
                    }
                }

                // TAG_PATIENT_ID
                element = ds.FindFirstElement(null, DemoDicomTags.PatientID, false);
                if (element != null)
                {
                    strAttributeValue = ds.GetStringValue(element, 0);
                    if ((strAttributeValue != null) && (strAttributeValue != ""))
                    {
                        // Single value matching -- case sensitive
                        strSqlQuery += " And TAG_PATIENT_ID = '" + FilterForSingleValueMatch(strAttributeValue) + "'";
                    }
                }

                // TAG_PATIENT_BIRTH_DATE
                element = ds.FindFirstElement(null, DemoDicomTags.PatientBirthDate, false);
                if (element != null)
                {
                    DicomDateValue[] dateValue = ds.GetDateValue(element, 0, 1);

                    if (dateValue.Length > 0)
                    {
                        strSqlQuery += " And (julianday(substr(TAG_PATIENT_BIRTH_DATE,1,10)) = julianday('" + ConvertDicomDateToQueryDate(dateValue[0]) + "'))";
                    }
                }

                // TAG_PATIENT_SEX
                element = ds.FindFirstElement(null, DemoDicomTags.PatientSex, false);
                if (element != null)
                {
                    strAttributeValue = ds.GetStringValue(element, 0);
                    if ((strAttributeValue != null) && (strAttributeValue != ""))
                    {
                        // Single value matching -- case sensitive
                        strSqlQuery += " And TAG_PATIENT_SEX = '" + FilterForSingleValueMatch(strAttributeValue) + "'";
                    }
                }

                // TAG_PATIENT_WEIGHT
                element = ds.FindFirstElement(null, DemoDicomTags.PatientWeight, false);
                if (element != null)
                {
                    double[] dAttributeValue = ds.GetDoubleValue(element, 0, 1);

                    //strAttributeValue =
                    if (dAttributeValue.Length > 0)
                    {
                        strAttributeValue = dAttributeValue[0].ToString();
                        // Single value matching -- case sensitive
                        strSqlQuery += " And TAG_PATIENT_WEIGHT = '" + FilterForSingleValueMatch(strAttributeValue) + "'";
                    }
                }

                // TAG_STUDY_INSTANCE_UID
                strSqlQuery += GetUIDCondition((long)DemoDicomTags.StudyInstanceUID, "TAG_STUDY_INSTANCE_UID"); // List of Matching UIDs

                // TAG_REQUESTING_PHYSICIAN
                element = ds.FindFirstElement(null, DemoDicomTags.RequestingPhysician, false);
                if (element != null)
                {
                    strAttributeValue = ds.GetStringValue(element, 0);
                    if ((strAttributeValue != null) && (strAttributeValue != ""))
                    {
                        // Wild card matching -- case insensitive
                        strSqlQuery += " And TAG_REQUESTING_PHYSICIAN LIKE '" + PrepareForWCM(strAttributeValue) + "'";
                    }
                }

                // TAG_REQUESTED_PROCEDURE_DESCRIPTION
                element = ds.FindFirstElement(null, DemoDicomTags.RequestedProcedureDescription, false);
                if ((strAttributeValue != null) && (strAttributeValue != ""))
                {
                    strAttributeValue = ds.GetStringValue(element, 0);
                    if ((strAttributeValue != null) && (strAttributeValue != ""))
                    {
                        // Wild card matching -- case insensitive
                        strSqlQuery += " And TAG_REQUESTED_PROCEDURE_DESCRIPTION LIKE '" + PrepareForWCM(strAttributeValue) + "'";
                    }
                }

                // TAG_ADMISSION_ID
                element = ds.FindFirstElement(null, DemoDicomTags.AdmissionID, false);
                if ((strAttributeValue != null) && (strAttributeValue != ""))
                {
                    strAttributeValue = ds.GetStringValue(element, 0);
                    if ((strAttributeValue != null) && (strAttributeValue != ""))
                    {
                        // Single value matching -- case sensitive
                        strSqlQuery += " And TAG_ADMISSION_ID = '" + FilterForSingleValueMatch(strAttributeValue) + "'";
                    }
                }

                // TAG_SCHEDULED_STATION_AE_TITLE
                element = ds.FindFirstElement(null, DemoDicomTags.ScheduledStationAETitle, false);
                if ((strAttributeValue != null) && (strAttributeValue != ""))
                {
                    strAttributeValue = ds.GetStringValue(element, 0);
                    if ((strAttributeValue != null) && (strAttributeValue != ""))
                    {
                        // Single value matching -- case sensitive
                        strSqlQuery += " And TAG_SCHEDULED_STATION_AE_TITLE = '" + FilterForSingleValueMatch(strAttributeValue) + "'";
                    }
                }

                // TAG_SCHEDULED_PROCEDURE_STEP_START_DATE
                element = ds.FindFirstElement(null, DemoDicomTags.ScheduledProcedureStepStartDate, false);
                if (element != null)
                {
                    DicomDateValue[] dateValue = ds.GetDateValue(element, 0, 1);

                    if (dateValue.Length > 0)
                    {
                        strSqlQuery += " And (julianday(substr(TAG_SCHEDULED_PROCEDURE_STEP_START_DATE,1,10)) = julianday('" + ConvertDicomDateToQueryDate(dateValue[0]) + "'))";
                    }
                }

                // TAG_SCHEDULED_PROCEDURE_STEP_START_TIME
                element = ds.FindFirstElement(null, DemoDicomTags.ScheduledProcedureStepStartTime, false);
                if (element != null)
                {
                    DicomTimeValue[] timeValue = ds.GetTimeValue(element, 0, 1);

                    if (timeValue.Length > 0)
                    {
                        strSqlQuery += " And (julianday(substr(TAG_SCHEDULED_PROCEDURE_STEP_START_TIME,-8,8)) = julianday('" + ConvertDicomTimeToQueryTime(timeValue[0]) + "'))";
                    }
                }

                // TAG_SCHEDULED_PERFORMING_PHYSICIAN_NAME
                element = ds.FindFirstElement(null, DemoDicomTags.ScheduledPerformingPhysicianName, false);
                if (element != null)
                {
                    strAttributeValue = ds.GetStringValue(element, 0);
                    if ((strAttributeValue != null) && (strAttributeValue != ""))
                    {
                        // Wild card matching -- case insensitive
                        strSqlQuery += " And TAG_SCHEDULED_PERFORMING_PHYSICIAN_NAME LIKE '" + PrepareForWCM(strAttributeValue) + "'";
                    }
                }

                // TAG_SCHEDULED_PROCEDURE_STEP_DESCRIPTION
                element = ds.FindFirstElement(null, DemoDicomTags.ScheduledProcedureStepDescription, false);
                if (element != null)
                {
                    strAttributeValue = ds.GetStringValue(element, 0);
                    if ((strAttributeValue != null) && (strAttributeValue != ""))
                    {
                        // Wild card matching -- case insensitive
                        strSqlQuery += " And TAG_SCHEDULED_PROCEDURE_STEP_DESCRIPTION LIKE '" + PrepareForWCM(strAttributeValue) + "'";
                    }
                }

                // TAG_SCHEDULED_PROCEDURE_STEP_ID
                element = ds.FindFirstElement(null, DemoDicomTags.ScheduledProcedureStepID, false);
                if (element != null)
                {
                    strAttributeValue = ds.GetStringValue(element, 0);
                    if ((strAttributeValue != null) && (strAttributeValue != ""))
                    {
                        // Single value matching -- case sensitive
                        strSqlQuery += " And TAG_SCHEDULED_PROCEDURE_STEP_ID = '" + FilterForSingleValueMatch(strAttributeValue) + "'";
                    }
                }

                // TAG_SCHEDULED_PROCEDURE_STEP_LOCATION
                element = ds.FindFirstElement(null, DemoDicomTags.ScheduledProcedureStepLocation, false);
                if (element != null)
                {
                    strAttributeValue = ds.GetStringValue(element, 0);
                    if ((strAttributeValue != null) && (strAttributeValue != ""))
                    {
                        // Wild card matching -- case insensitive
                        strSqlQuery += " And TAG_SCHEDULED_PROCEDURE_STEP_LOCATION LIKE '" + PrepareForWCM(strAttributeValue) + "'";
                    }
                }

                // TAG_REQUESTED_PROCEDURE_ID
                element = ds.FindFirstElement(null, DemoDicomTags.RequestedProcedureID, false);
                if (element != null)
                {
                    strAttributeValue = ds.GetStringValue(element, 0);
                    if ((strAttributeValue != null) && (strAttributeValue != ""))
                    {
                        // Single value matching -- case sensitive
                        strSqlQuery += " And TAG_REQUESTED_PROCEDURE_ID = '" + FilterForSingleValueMatch(strAttributeValue) + "'";
                    }
                }

                // TAG_REASON_FOR_THE_REQUESTED_PROCEDURE
                element = ds.FindFirstElement(null, DemoDicomTags.ReasonForTheRequestedProcedure, false);
                if (element != null)
                {
                    strAttributeValue = ds.GetStringValue(element, 0);
                    if ((strAttributeValue != null) && (strAttributeValue != ""))
                    {
                        // Single value matching -- case sensitive
                        strSqlQuery += " And TAG_REASON_FOR_THE_REQUESTED_PROCEDURE = '" + FilterForSingleValueMatch(strAttributeValue) + "'";
                    }
                }

                // TAG_REQUESTED_PROCEDURE_PRIORITY
                element = ds.FindFirstElement(null, DemoDicomTags.RequestedProcedurePriority, false);
                if (element != null)
                {
                    strAttributeValue = ds.GetStringValue(element, 0);
                    if ((strAttributeValue != null) && (strAttributeValue != ""))
                    {
                        // Single value matching -- case sensitive
                        strSqlQuery += " And TAG_REQUESTED_PROCEDURE_PRIORITY = '" + FilterForSingleValueMatch(strAttributeValue) + "'";
                    }
                }
            }
            catch (Exception ex)
            {
                server.mf.Log("Error generating SQL query:\r\n\r\n" + ex.ToString());
                return("");
            }

            return(strSqlQuery);
        }