private static void UpdateGUID(DataTable dt, DataColumn dc, string columnName, GWDataDBField field) { if (dc.ColumnName == columnName) { Dictionary <string, string> rpIDs = new Dictionary <string, string>(); foreach (DataRow dr in dt.Rows) { object o = dr[dc]; string rpID = (o == null) ? "" : o.ToString(); if (rpID.Length < 1) // need to generate GUID { string guid = DicomMappingHelper.GetGUID(dr); if (rpIDs.ContainsKey(guid)) { // 20100222 // has already generated GUID in this loop, // for example there are two records with same guid and splitted according to multiple procedure codes // 20100227 // as we move the auto generating STDUID before the procedure code spliting in the class Kodak.GCGateway.DicomAdapter.MWLServer.Dicom.WorklistSCP, // this (different records with the same guid/data_id) will not happen any more. rpID = rpIDs[guid]; } else { rpID = DHelper.GetDicomGUID(Program.DeviceMgt.DeviceDirInfor.Header.ID, Program.ConfigMgt.Config.MaxAutoGeneratedLengthOfSTDUID); rpIDs.Add(guid, rpID); } dr[dc] = rpID; } } if (rpIDs.Count > 0) { StringBuilder sb = new StringBuilder(); foreach (KeyValuePair <string, string> pair in rpIDs) { string tableName = GWDataDB.GetTableName(Program.InterfaceName, GWDataDBTable.Order); string pkName = GWDataDBField.o_DATA_ID.FieldName; string fieldName = field.FieldName; sb.Append("UPDATE ").Append(tableName) .Append(" SET ").Append(fieldName).Append(" = '").Append(pair.Value).Append("'") .Append(" WHERE ").Append(pkName).Append(" = '").Append(pair.Key).Append("';\r\n"); } if (Program.Database.DoQuery(sb.ToString()) == null) { Program.Log.Write(LogType.Error, "Update " + columnName + " into database failed."); } else { Program.Log.Write("Update " + columnName + " into database succeeded."); } } } }
private static void UpdateID(DataTable dt, DataColumn dc, string columnName, GWDataDBField field) { if (dc.ColumnName == columnName) { Dictionary <string, string> rpIDs = new Dictionary <string, string>(); foreach (DataRow dr in dt.Rows) { object o = dr[dc]; string rpID = (o == null) ? "" : o.ToString(); if (rpID.Length < 1) { string guid = DicomMappingHelper.GetGUID(dr); if (rpIDs.ContainsKey(guid)) { // 20100222 // please see the function UpdateGUID() for details rpID = rpIDs[guid]; } else { rpID = GetRandomNumber(Program.ConfigMgt.Config.MaxAutoGeneratedLengthOfRPIDAndSPSID).ToString(); rpIDs.Add(guid, rpID); } dr[dc] = rpID; } } if (rpIDs.Count > 0) { StringBuilder sb = new StringBuilder(); foreach (KeyValuePair <string, string> pair in rpIDs) { string tableName = GWDataDB.GetTableName(Program.InterfaceName, GWDataDBTable.Order); string pkName = GWDataDBField.o_DATA_ID.FieldName; string fieldName = field.FieldName; sb.Append("UPDATE ").Append(tableName) .Append(" SET ").Append(fieldName).Append(" = '").Append(pair.Value).Append("'") .Append(" WHERE ").Append(pkName).Append(" = '").Append(pair.Key).Append("';\r\n"); } //Program.Log.Write(sb.ToString()); if (Program.Database.DoQuery(sb.ToString()) == null) { Program.Log.Write(LogType.Error, "Update " + columnName + " into database failed."); } else { Program.Log.Write("Update " + columnName + " into database succeeded."); } } } }
public static DElementListWrapper[] CreateQRElementList <TR>(XCollection <TR> qrList, DataSet dsQR) where TR : QueryResultItem, IDicomMappingItem { if (qrList == null || dsQR == null || dsQR.Tables.Count < 1) { return(null); } DataTable dt = dsQR.Tables[0]; string pkColumn = Program.ConfigMgt.Config.PrimaryKeyColumnName; if (!dt.Columns.Contains(pkColumn)) { return(null); } Dictionary <string, List <DataRow> > drDict = new Dictionary <string, List <DataRow> >(); foreach (DataRow dr in dt.Rows) { string key = null; string pkValue = dr[pkColumn] as string; //if (pkValue != null || pkValue.Length > 0) if (pkValue != null && pkValue.Length > 0) { key = pkValue; } else { key = "_" + dt.Rows.IndexOf(dr).ToString(); } if (drDict.ContainsKey(key)) { drDict[key].Add(dr); } else { List <DataRow> drList = new List <DataRow>(); drDict.Add(key, drList); drList.Add(dr); } } List <DElementListWrapper> dcmResult = new List <DElementListWrapper>(); foreach (KeyValuePair <string, List <DataRow> > pair in drDict) { int count = qrList.Count; DicomDataset dcmEleList = new DicomDataset(); for (int index = 0; index < count; index++) { IDicomMappingItem qr = qrList[index] as IDicomMappingItem; if (!qr.DPath.Enable) { continue; } //int tag = qr.DPath.GetTag(0); List <string> tagList = qr.DPath.GetTagGE(0); ushort uGroup = DHelper.HexString2ushort(tagList[0]); ushort uElement = DHelper.HexString2ushort(tagList[1]); DicomTag tag = new DicomTag(uGroup, uElement); FillElement <TR>(dcmEleList, tag, qr.DPath.VR, ref index, 0, qrList, pair.Value.ToArray()); //dcmEleList.Add(ele); } DElementListWrapper w = new DElementListWrapper(dcmEleList); foreach (DataRow dr in pair.Value) { w.GUIDs.Add(DicomMappingHelper.GetGUID(dr)); } dcmResult.Add(w); } return(dcmResult.ToArray()); }