public KRNetworkingConfig(bool p_isInstantiation) { if (p_isInstantiation) { DatabaseConfigModel = new DatabaseConfigModel(); PatientMapModel = new PatientMapModel(DatabaseHelper.LocalConnStr); ReportSaveModel = new ReportSaveModel(); DataCallBackModel = new DataCallBackModel(); HttpConfigModel = new HttpConfigModel(); WcfConfigModel = new WcfConfigModel(); } }
public override void Execute(object parameter) { DatabaseConfigModel dbConfig = NetworkingViewModel.DatabaseConfigModel; DataCallBackModel dcModel = NetworkingViewModel.DataCallBackModel; DatabaseEnum databaseEnum = DataBaseSoft.TransDatabaseSoft(dbConfig.DatabaseSoft, dbConfig.IsAdvancedSetting); IDatabaseHelper db = DatabaseHelper.Open(databaseEnum, dbConfig.ConnectionString); ; string tableName = string.Empty; if (dcModel.CallbackType == "表") { tableName = dcModel.TargetTableName; } else if (dcModel.CallbackType == "存储过程") { tableName = dcModel.TargetProcName; } if (string.IsNullOrEmpty(tableName)) { return; } string sql = string.Empty; if (dbConfig.DatabaseSoft == DatabaseSoft.SQLServer) { sql = string.Format( "SELECT A.NAME,B.NAME AS TYPE,A.LENGTH,A.ISNULLABLE FROM SYSCOLUMNS A,SYSTYPES B,SYSOBJECTS D WHERE A.XTYPE=B.XUSERTYPE AND A.ID=D.ID AND A.ID =OBJECT_ID('{0}')", tableName); } else if (dbConfig.DatabaseSoft == DatabaseSoft.Oracle) { if (dcModel.CallbackType == "表") { sql = string.Format( "SELECT A.COLUMN_NAME AS NAME,A.DATA_TYPE AS TYPE,A.DATA_LENGTH AS LENGTH,A.NULLABLE AS ISNULLABLE FROM USER_TAB_COLS A WHERE UPPER(A.TABLE_NAME) = '{0}'", tableName.ToUpper()); } else { sql = string.Format( "SELECT A.ARGUMENT_NAME AS NAME,A.DATA_TYPE AS TYPE,NVL(A.DATA_LENGTH,0) AS LENGTH, 0 AS ISNULLABLE FROM USER_ARGUMENTS A WHERE UPPER(A.OBJECT_NAME)='{0}' ORDER BY SEQUENCE", tableName.ToUpper()); } } else if (dbConfig.DatabaseSoft == DatabaseSoft.PostgreSQL) { sql = string.Format( "select a.column_name as Name, a.udt_name as TYPE,a.character_maximum_length as LENGTH, a.is_nullable as ISNULLABLE from information_schema.columns a where table_schema='public' and table_name='{0}'", tableName); } else { if (dcModel.CallbackType == "表") { sql = string.Format( "SELECT A.COLUMN_NAME AS NAME, A.DATA_TYPE TYPE,A.COLUMN_TYPE AS LENGTH,A.IS_NULLABLE AS ISNULLABLE FROM INFORMATION_SCHEMA.COLUMNS A WHERE A.TABLE_SCHEMA = '{0}' AND A.TABLE_NAME = '{1}'", dbConfig.Database, tableName); } else { sql = string.Format( "SELECT DB, TYPE, SPECIFIC_NAME, PARAM_LIST, RETURNS FROM MYSQL.PROC A WHERE UPPER(A.SPECIFIC_NAME) = '{0}'", tableName.ToUpper()); } } DataTable table = db.ExecuteQuery(sql); dcModel.CallbackTabelMap.Clear(); if (!(dbConfig.DatabaseSoft == DatabaseSoft.MySql && dcModel.CallbackType == "存储过程")) { var regex = new Regex(@"^\d*$"); foreach (DataRow row in table.AsEnumerable()) { string name = row["NAME"].ToString(); if (string.IsNullOrEmpty(name)) { continue; } int size = -1; string length = row["LENGTH"].ToString(); Match match = regex.Match(length); if (match.Success && !string.IsNullOrEmpty(match.Value)) { size = Convert.ToInt32(match.Value); } var tfmm = new TableFieldMapModel(); tfmm.LocalField = row["NAME"].ToString(); tfmm.Type = row["TYPE"].ToString(); tfmm.TargetField = ""; tfmm.Size = size; dcModel.CallbackTabelMap.Add(tfmm); } } else { DataRow dataRow = table.AsEnumerable().FirstOrDefault(); if (dataRow != null) { var parambytes = dataRow["PARAM_LIST"] as byte[]; var ue = new ASCIIEncoding(); string paramList = ue.GetString(parambytes); if (!string.IsNullOrEmpty(paramList)) { string[] paraml = paramList.Split(new string[1] { "," }, StringSplitOptions.RemoveEmptyEntries); foreach (string param in paraml) { string value = param.Trim(); if (value.StartsWith("OUT")) { continue; } string[] values = value.Split(new[] { " " }, StringSplitOptions.RemoveEmptyEntries); string name = string.Empty; string type = string.Empty; if (value.StartsWith("IN")) { name = values[1]; type = values[2]; } else { name = values[0]; type = values[1]; } var tfmm = new TableFieldMapModel(); tfmm.LocalField = name; tfmm.Type = type; tfmm.TargetField = ""; tfmm.Size = 0; dcModel.CallbackTabelMap.Add(tfmm); } } } } //NetworkingViewModel.TargetFieldList = list; }