정규 표현 식 클래스 를 이용 하여 SQL 문 구 를 해석 하여 Worklist 가 각 RIS 데이터 베 이 스 를 호 환 하 는 목적 을 달성 합 니 다.
6141 단어 기술 을 개발 하 다
RIS , Worklist RIS , 。
1.xml RIS ,
2.xml / SQL , / {x} 。 {0}
3.xml Worklist SCU query , Tag ID Tag Name Column 。
4. : Worklist SCU Query, WorklistSCP , column , xml xml , Sql 。 API Sql 。
public class RISQueryHelper { public string BuildSelectQuery(string select) { if (String.IsNullOrEmpty(select)) { throw new ArgumentNullException("input select query is null."); } string query = select.Replace("@", "").Replace("'", "'"); return query; } public string BuildUpdateQuery(string update, params object[] columnValues) { if (String.IsNullOrEmpty(update)) { throw new ArgumentNullException("input sql statement is null or empty."); } BuildTableRelationship(update); string sql = update.Replace("@", "").Replace("'", "'"); //Sql template mark the parameter by{x},x like: 1,2,3,4,5,...n //For example: UPDATE @RequestedProcedure SET @Status='{0}' WHERE @Order_Refid IN (SELECT @Refid FROM @Orders WHERE @AccessionNo='{1}'; //So we can use String.Format to replace {x} by our real value. { sql = String.Format(sql, columnValues); } return sql; } public void BuildTableRelationship(string update) { //{Get table & column name, we will use these data to construct relationship between tables and column for further. string[] tables = null; string[] cols = null; if (!BuildUpdateQueryArgs(update, out tables, out cols)) { throw new Exception("Build sql statement failed. Input sql is : " + update); } //end, need to parse when statement has many tables.} } public bool BuildUpdateQueryArgs(string update, out string[] tableNames, out string[] columnNames) { if (String.IsNullOrEmpty(update)) { throw new ArgumentNullException("input select query is null."); } List<string> tables = new List<string>(); List<string> columns = new List<string>(); string sql = update; BuildTableNames(ref sql, ref tables); BuildColumnNames(ref sql, ref columns); tableNames = tables.ToArray(); columnNames = columns.ToArray(); return true; } private void BuildTableNames(ref string sql, ref List<string> tables) { var statement = Regex.Matches( sql, @"\bfrom\b.+?\bwhere\b|\bupdate\b.+?\bset\b", RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhitespace | RegexOptions.Multiline); foreach (Match t in statement) { //delete table operation from sql statement. sql = sql.Replace(t.Value, ""); //save table name tables.Add(Regex.Replace(t.Value, @"\bupdate\b|@|\bset\b|\s|\bfrom\b|\bwhere\b", "", RegexOptions.IgnoreCase)); } } private void BuildColumnNames(ref string sql, ref List<string> columns) { var statement = Regex.Matches( sql, @"@\w+\b\s*=", RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhitespace | RegexOptions.Multiline); foreach (Match t in statement) { //delete column operation from sql statement. sql = sql.Replace(t.Value, ""); //save column name columns.Add(Regex.Replace(t.Value, @"@|\s|=", "", RegexOptions.IgnoreCase)); } } }
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
경량급 HTTP 서버 NginxNginx 가 제공 하 는 프로필 디 버 깅 기능 은 매우 유용 하여 프로필 에 존재 하 는 문제점 을 빠르게 찾 을 수 있 습 니 다.다음 명령 을 실행 하여 설정 파일 의 정확성 을 검사 합 니 다: (2) Ng...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.