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