示例#1
0
文件: DB.cs 项目: sakpung/webstudy
        /// <summary>
        /// Finds the image.
        /// </summary>
        /// <param name="addin">The addin.</param>
        /// <param name="affectedClass">The affected class.</param>
        /// <param name="connection">The connection.</param>
        /// <param name="ds">The ds.</param>
        /// <param name="response">The response.</param>
        /// <returns></returns>
        public static DicomCommandStatusType FindImage(FindAddIn addin, string affectedClass, string connection, DicomDataSet ds, DicomDataSet response)
        {
            string          filter = string.Empty;
            string          temp;
            SqlCeDataReader reader;

            filter  = "s.StudyInstanceUID = '" + ds.GetValue <string>(DicomTag.StudyInstanceUID, string.Empty) + "'";
            filter += " AND SeriesInstanceUID = '" + ds.GetValue <string>(DicomTag.SeriesInstanceUID, string.Empty) + "'";

            temp = ds.GetValue <string>(DicomTag.PatientID, string.Empty);
            if (affectedClass == DicomUidType.PatientRootQueryFind && temp.Length > 0)
            {
                filter += " AND p.PatientID = '" + temp + "'";
            }

            List <string> instances = ds.GetValue <List <string> >(DicomTag.SOPInstanceUID, new List <string>());

            foreach (string instance in instances)
            {
                filter += " AND SOPInstanceUID ='" + instance + "'";
            }

            temp = ds.GetValue <string>(DicomTag.InstanceNumber, string.Empty);
            if (temp.Length > 0)
            {
                filter += " AND InstanceNumber = " + temp.ToString();
            }

            filter = "SELECT p.PatientId,Name,Images.* FROM Images JOIN Studies s ON s.StudyInstanceUid = images.StudyInstanceUid JOIN Patients p ON p.PatientId = s.PatientId WHERE " + filter;
            reader = SqlCeHelper.ExecuteReader(connection, filter);
            while (reader.Read())
            {
                response.InsertElementAndSetValue(DicomTag.SOPInstanceUID, reader["SOPInstanceUID"]);
                if (affectedClass == DicomUidType.PatientRootQueryFind)
                {
                    response.InsertElementAndSetValue(DicomTag.PatientID, ds.GetValue <string>(DicomTag.PatientID, string.Empty));
                }

                if (reader["ImageNumber"] != null && reader["ImageNumber"].ToString().Length > 0)
                {
                    response.InsertElementAndSetValue(DicomTag.InstanceNumber, reader["ImageNumber"]);
                }

                if (addin.OnMatchFound(response))
                {
                    reader.Close();
                    return(DicomCommandStatusType.Cancel);
                }
                else if (addin.Cancel)
                {
                    if (addin.BreakType == BreakType.Cancel)
                    {
                        return(DicomCommandStatusType.Cancel);
                    }
                    else
                    {
                        return(DicomCommandStatusType.Failure);
                    }
                }

                //response.Clear();
            }

            return(DicomCommandStatusType.Success);
        }
示例#2
0
文件: DB.cs 项目: sakpung/webstudy
        public static DicomCommandStatusType FindPatient(FindAddIn addin, string connection, DicomDataSet ds, DicomDataSet response)
        {
            string          filter      = string.Empty;
            string          patientID   = ds.GetValue <string>(DicomTag.PatientID, string.Empty);
            string          patientName = ds.GetValue <string>(DicomTag.PatientName, string.Empty);
            SqlCeDataReader reader      = null;

            if (patientID.Length > 0)
            {
                filter = CheckForWildcards("PatientID LIKE '" + patientID + "'");
            }

            if (patientName.Length > 0)
            {
                if (filter.Length > 0)
                {
                    filter += " AND ";
                }
                filter += CheckForWildcards("Name LIKE '" + patientName + "'");
            }

            if (string.IsNullOrEmpty(filter))
            {
                filter = "SELECT * FROM Patients";
            }
            else
            {
                filter = "SELECT * FROM Patients WHERE " + filter;
            }

            reader = SqlCeHelper.ExecuteReader(connection, filter);
            while (reader.Read())
            {
                response.InsertElementAndSetValue(DicomTag.PatientID, reader["PatientID"]);
                if (reader["Name"] != null)
                {
                    response.InsertElementAndSetValue(DicomTag.PatientName, reader["Name"]);
                }
                if (reader["BirthDate"] != null)
                {
                    response.InsertElementAndSetValue(DicomTag.PatientBirthDate, reader["BirthDate"]);
                }
                if (reader["Sex"] != null)
                {
                    response.InsertElementAndSetValue(DicomTag.PatientSex, reader["Sex"]);
                }
                if (reader["EthnicGroup"] != null)
                {
                    response.InsertElementAndSetValue(DicomTag.EthnicGroup, reader["EthnicGroup"]);
                }
                if (reader["Comments"] != null)
                {
                    response.InsertElementAndSetValue(DicomTag.PatientComments, reader["Comments"]);
                }
                if (addin.OnMatchFound(response))
                {
                    reader.Close();
                    return(DicomCommandStatusType.Cancel);
                }
                else if (addin.Cancel)
                {
                    if (addin.BreakType == BreakType.Cancel)
                    {
                        return(DicomCommandStatusType.Cancel);
                    }
                    else
                    {
                        return(DicomCommandStatusType.Failure);
                    }
                }

                //response.Clear();
            }
            return(DicomCommandStatusType.Success);
        }
示例#3
0
文件: DB.cs 项目: sakpung/webstudy
        /// <summary>
        /// Finds the series.
        /// </summary>
        /// <param name="addin">The addin.</param>
        /// <param name="affectedClass">The affected class.</param>
        /// <param name="connection">The connection.</param>
        /// <param name="ds">The ds.</param>
        /// <param name="response">The response.</param>
        /// <returns></returns>
        public static DicomCommandStatusType FindSeries(FindAddIn addin, string affectedClass, string connection, DicomDataSet ds, DicomDataSet response)
        {
            string          filter = string.Empty;
            string          temp;
            SqlCeDataReader reader;

            filter = "s.StudyInstanceUID = '" + ds.GetValue <string>(DicomTag.StudyInstanceUID, string.Empty) + "'";

            temp = ds.GetValue <string>(DicomTag.PatientID, string.Empty);
            if (affectedClass == DicomUidType.PatientRootQueryFind && temp.Length > 0)
            {
                filter += " AND p.PatientID = '" + temp + "'";
            }

            temp = ds.GetValue <string>(DicomTag.SeriesInstanceUID, string.Empty);
            if (temp.Length > 0)
            {
                filter += " AND SeriesInstanceUID='" + temp + "'";
            }

            temp = ds.GetValue <string>(DicomTag.Modality, string.Empty);
            if (temp.Length > 0)
            {
                filter += " AND Modality LIKE '" + temp + "'";
            }

            temp = ds.GetValue <string>(DicomTag.SeriesNumber, string.Empty);
            if (temp.Length > 0)
            {
                filter += " AND SeriesNumber = " + temp;
            }

            filter = "SELECT p.PatientId,Name,Series.* FROM Series JOIN Studies s ON s.StudyInstanceUid = Series.StudyInstanceUid JOIN Patients p ON p.PatientId = s.PatientId WHERE " + filter;
            reader = SqlCeHelper.ExecuteReader(connection, filter);
            while (reader.Read())
            {
                response.InsertElementAndSetValue(DicomTag.SeriesInstanceUID, reader["SeriesInstanceUID"]);

                if (reader["Modality"] != null)
                {
                    response.InsertElementAndSetValue(DicomTag.Modality, reader["Modality"]);
                }
                if (reader["SeriesNumber"] != null && IsInteger(reader["SeriesNumber"].ToString()))
                {
                    response.InsertElementAndSetValue(DicomTag.SeriesNumber, reader["SeriesNumber"]);
                }
                if (reader["SeriesDate"] != null && reader["SeriesDate"].ToString().Length > 0)
                {
                    DateTime date = DateTime.Parse(reader["SeriesDate"].ToString());

                    response.InsertElementAndSetValue(DicomTag.SeriesDate, date.ToShortDateString());
                    response.InsertElementAndSetValue(DicomTag.SeriesTime, date.ToShortTimeString());
                }
                if (reader["SeriesDesscription"] != null)
                {
                    response.InsertElementAndSetValue(DicomTag.SeriesDescription, reader["SeriesDesscription"].ToString());
                }
                if (reader["StudyInstanceUID"] != null)
                {
                    response.InsertElementAndSetValue(DicomTag.StudyInstanceUID, reader["StudyInstanceUID"].ToString());
                }
                try
                {
                    string sql = string.Format("SELECT Count(*) FROM Images WHERE SeriesInstanceUID = '{0}'", reader["SeriesInstanceUID"]);

                    response.InsertElementAndSetValue(DicomTag.NumberOfSeriesRelatedInstances, (int)SqlCeHelper.ExecuteScalar(connection, sql));
                }
                catch { }

                if (addin.OnMatchFound(response))
                {
                    reader.Close();
                    return(DicomCommandStatusType.Cancel);
                }
                else if (addin.Cancel)
                {
                    if (addin.BreakType == BreakType.Cancel)
                    {
                        return(DicomCommandStatusType.Cancel);
                    }
                    else
                    {
                        return(DicomCommandStatusType.Failure);
                    }
                }


                //response.Clear();
            }

            return(DicomCommandStatusType.Success);
        }
示例#4
0
文件: DB.cs 项目: sakpung/webstudy
        /// <summary>
        /// Finds the study.
        /// </summary>
        /// <param name="addin">The addin.</param>
        /// <param name="connection">The connection.</param>
        /// <param name="ds">The ds.</param>
        /// <param name="response">The response.</param>
        /// <returns></returns>
        public static DicomCommandStatusType FindStudy(FindAddIn addin, string connection, DicomDataSet ds, DicomDataSet response)
        {
            string          filter = string.Empty;
            string          temp;
            SqlCeDataReader reader;

            temp = ds.GetValue <string>(DicomTag.PatientID, string.Empty);
            if (temp.Length > 0)
            {
                filter = CheckForWildcards("Studies.PatientId = '" + temp + "'");
            }

            temp = ds.GetValue <string>(DicomTag.PatientName, string.Empty);
            if (temp.Length > 0)
            {
                if (filter.Length > 0)
                {
                    filter += " AND ";
                }
                filter += CheckForWildcards("Name LIKE '" + temp + "'");
            }

            List <string> instances = ds.GetValue <List <string> >(DicomTag.StudyInstanceUID, new List <string>());

            foreach (string instance in instances)
            {
                if (filter.Length > 0)
                {
                    filter += " AND ";
                }

                filter += CheckForWildcards("StudyInstanceUid = '" + instance + "'");
            }

            DicomDateRangeValue[] d = ExtensionMethods.GetDateRange(ds, DicomTag.StudyDate);
            DicomTimeRangeValue[] t = ExtensionMethods.GetTimeRange(ds, DicomTag.StudyTime);
            int dCount     = (d == null ? 0 : d.Length);
            int tCount     = (t == null ? 0 : t.Length);
            int maxEntries = Math.Max(dCount, tCount);

            for (int i = 0; i < maxEntries; i++)
            {
                DateTime startDate      = new DateTime(1900, 1, 1, 0, 0, 0);
                DateTime endDate        = new DateTime(3000, 12, 31, 23, 59, 59);
                DateTime startTime      = DateTime.MinValue;
                DateTime endTime        = DateTime.MaxValue;
                string   sStartDateTime = string.Empty;
                string   sEndDateTime   = string.Empty;

                // Get the start date and end date
                if (i < dCount)
                {
                    // start date
                    if ((d[i].Type == DicomRangeType.Lower) || (d[i].Type == DicomRangeType.Both))
                    {
                        startDate = new DateTime(d[i].Date1.Year, d[i].Date1.Month, d[i].Date1.Day, 0, 0, 0);
                    }

                    // end date
                    if (d[i].Type == DicomRangeType.Upper)
                    {
                        endDate = new DateTime(d[i].Date1.Year, d[i].Date1.Month, d[i].Date1.Day, 23, 59, 59);
                    }
                    else if (d[i].Type == DicomRangeType.Both)
                    {
                        endDate = new DateTime(d[i].Date2.Year, d[i].Date2.Month, d[i].Date2.Day, 23, 59, 59);
                    }
                }

                // Get the start time and end time
                if (i < tCount)
                {
                    // start date
                    if ((t[i].Type == DicomRangeType.Lower) || (t[i].Type == DicomRangeType.Both))
                    {
                        startTime = new DateTime(1, 1, 1, t[i].Time1.Hours, t[i].Time1.Minutes, t[i].Time1.Seconds);
                    }

                    // end date
                    if (t[i].Type == DicomRangeType.Upper)
                    {
                        endTime = new DateTime(1, 1, 1, t[i].Time1.Hours, t[i].Time1.Minutes, t[i].Time1.Seconds);
                    }
                    else if (t[i].Type == DicomRangeType.Both)
                    {
                        endTime = new DateTime(1, 1, 1, t[i].Time2.Hours, t[i].Time2.Minutes, t[i].Time2.Seconds);
                    }
                }

                string sAdd = string.Format("( (StudyDate >= '{0}') and (StudyDate <= '{1}'))", startDate, endDate);
                string sTimeFormatString = "AND ((CONVERT(nvarchar,StudyDate,108) BETWEEN '{0}' AND '{1}'))";

                filter += sAdd;
                sAdd    = string.Format(sTimeFormatString, startTime.ToString("HH:mm:ss"), endTime.ToString("HH:mm:ss"));
                filter += sAdd;
            }

            temp = ds.GetValue <string>(DicomTag.AccessionNumber, string.Empty);
            if (temp.Length > 0)
            {
                if (filter.Length > 0)
                {
                    filter += " AND ";
                }
                filter += CheckForWildcards("AccessionNumber = '" + temp + "'");
            }

            temp = ds.GetValue <string>(DicomTag.StudyID, string.Empty);
            if (temp.Length > 0)
            {
                if (filter.Length > 0)
                {
                    filter += " AND ";
                }
                filter += CheckForWildcards("StudyId LIKE '" + temp + "'");
            }

            temp = ds.GetValue <string>(DicomTag.ReferringPhysicianName, string.Empty);
            if (temp.Length > 0)
            {
                temp = temp.Replace("*", "%");
                if (filter.Length > 0)
                {
                    filter += " AND ";
                }
                filter += CheckForWildcards("ReferDrName LIKE '" + temp + "'");
            }

            temp = FindElementModalitiesInStudy(ds);
            if (temp.Length > 0)
            {
                if (filter.Length > 0)
                {
                    filter += " AND ";
                }
                filter += temp;
            }

            if (string.IsNullOrEmpty(filter))
            {
                filter = "SELECT p.PatientId,Name,Studies.* FROM Studies JOIN Patients p ON p.PatientId = Studies.PatientId";
            }
            else
            {
                filter = "SELECT p.PatientId,Name,Studies.* FROM Studies JOIN Patients p ON p.PatientId = Studies.PatientId WHERE " + filter;
            }


            reader = SqlCeHelper.ExecuteReader(connection, filter);
            while (reader.Read())
            {
                response.InsertElementAndSetValue(DicomTag.StudyInstanceUID, reader["StudyInstanceUID"]);

                if (reader["StudyDate"] != System.DBNull.Value)
                {
                    DateTime date = DateTime.Parse(reader["StudyDate"].ToString());

                    response.InsertElementAndSetValue(DicomTag.StudyDate, date.ToShortDateString());
                    response.InsertElementAndSetValue(DicomTag.StudyTime, date.ToShortTimeString());
                }

                if (reader["AccessionNumber"] != null)
                {
                    response.InsertElementAndSetValue(DicomTag.AccessionNumber, reader["AccessionNumber"]);
                }
                if (reader["StudyId"] != null)
                {
                    response.InsertElementAndSetValue(DicomTag.StudyID, reader["StudyId"]);
                }
                if (reader["PatientID"] != null)
                {
                    response.InsertElementAndSetValue(DicomTag.PatientID, reader["PatientId"]);
                }
                if (reader["Name"] != null)
                {
                    response.InsertElementAndSetValue(DicomTag.PatientName, reader["Name"]);
                }
                if (reader["ReferDrName"] != null)
                {
                    response.InsertElementAndSetValue(DicomTag.ReferringPhysicianName, reader["ReferDrName"]);
                }
                if (reader["StudyDescription"] != null)
                {
                    response.InsertElementAndSetValue(DicomTag.StudyDescription, reader["StudyDescription"]);
                }

                try
                {
                    string sql = string.Format("SELECT Count(*) FROM Series WHERE StudyInstanceUid = '{0}'", reader["StudyInstanceUID"]);

                    response.InsertElementAndSetValue(DicomTag.NumberOfStudyRelatedSeries, (int)SqlCeHelper.ExecuteScalar(connection, sql));
                    sql = string.Format("SELECT Count(*) FROM Images WHERE StudyInstanceUid = '{0}'", reader["StudyInstanceUID"]);
                    response.InsertElementAndSetValue(DicomTag.NumberOfStudyRelatedInstances, (int)SqlCeHelper.ExecuteScalar(connection, sql));
                }
                catch { }

                if (addin.OnMatchFound(response))
                {
                    reader.Close();
                    return(DicomCommandStatusType.Cancel);
                }
                else if (addin.Cancel)
                {
                    if (addin.BreakType == BreakType.Cancel)
                    {
                        return(DicomCommandStatusType.Cancel);
                    }
                    else
                    {
                        return(DicomCommandStatusType.Failure);
                    }
                }

                //response.Clear();
            }
            return(DicomCommandStatusType.Success);
        }