示例#1
0
 public static void LoadList(DBHelper source, int metaClassId, ArrayList fields)
 {
     using (IDataReader reader = source.RunTextDataReader(string.Format(CultureInfo.InvariantCulture, "SELECT F.Name, F.Length, T.SqlName, F.AllowNulls, T.Variable, T.DefaultValue FROM MetaClassMetaFieldRelation R JOIN MetaField F ON F.MetaFieldId = R.MetaFieldId JOIN MetaDataType T ON T.DataTypeId = F.DataTypeId WHERE R.MetaClassId = {0} AND F.SystemMetaClassId = 0 ORDER BY F.MetaFieldId", metaClassId)))
     {
         while (reader.Read())
         {
             MyMetaField item = Load(reader);
             fields.Add(item);
         }
     }
 }
示例#2
0
 internal void Load(DBHelper dbHelper)
 {
     using (IDataReader reader = dbHelper.RunTextDataReader("SELECT [LanguageId],[Locale],[FriendlyName] FROM [LANGUAGES] WHERE [IsDefault]=1"))
     {
         if (reader.Read())
         {
             LanguageId = (int)reader[0];
             Locale = reader[1].ToString();
             FriendlyName = reader[2].ToString();
         }
     }
 }
示例#3
0
文件: Portal.cs 项目: 0anion0/IBN
        internal static string GetPortalParameterValue(DBHelper dbHelper, string name)
        {
            string result = null;

            using (IDataReader reader = dbHelper.RunTextDataReader("SELECT [Value] FROM [PortalConfig] WHERE [Key]=@Key"
                , DBHelper.MP("@Key", SqlDbType.NVarChar, 100, name)))
            {
                if (reader.Read())
                    result = reader[0].ToString();
            }

            return result;
        }
示例#4
0
 internal static IList<CompanyInfo> LoadList(DBHelper source)
 {
     List<CompanyInfo> ret = new List<CompanyInfo>();
     using (IDataReader reader = source.RunTextDataReader("SELECT [company_id], [domain], [company_name], [db_name] FROM [COMPANIES]"))
     {
         while (reader.Read())
         {
             CompanyInfo item = Load(reader);
             ret.Add(item);
         }
     }
     return ret;
 }
示例#5
0
 public static ArrayList LoadList(DBHelper source)
 {
     ArrayList ret = new ArrayList();
     using (IDataReader reader = source.RunTextDataReader("SELECT [MetaClassId], [Name], [TableName] FROM [MetaClass] WHERE [IsSystem] = 0 AND [IsAbstract] = 0"))
     {
         while (reader.Read())
         {
             MyMetaClass item = Load(reader);
             if (item.Name != "AssetsEx")
                 ret.Add(item);
         }
     }
     return ret;
 }
示例#6
0
文件: ListFolder.cs 项目: 0anion0/IBN
        public static IDictionary<int, ListFolder> LoadList(DBHelper source)
        {
            Dictionary<int, ListFolder> ret = new Dictionary<int, ListFolder>();

            using (IDataReader reader = source.RunTextDataReader("SELECT * FROM [LIST_FOLDERS]"))
            {
                while (reader.Read())
                {
                    ListFolder item = Load(reader);
                    if (!ret.ContainsKey(item._listFolderId))
                        ret.Add(item._listFolderId, item);
                }
            }

            // Calculate OutlineLevel, OutlineNumber, HasChildren.
            foreach (ListFolder folder in ret.Values)
                folder.CalculateOutline(ret);

            return ret;
        }
示例#7
0
文件: Portal.cs 项目: 0anion0/IBN
        internal static IConfigurationParameter[] ListPortalParameters(DBHelper dbHelper)
        {
            List<IConfigurationParameter> list = new List<IConfigurationParameter>();

            using (IDataReader reader = dbHelper.RunTextDataReader("SELECT [Key],[Value] FROM [PortalConfig] ORDER BY [Key]"))
            {
                while (reader.Read())
                {
                    string name = reader[0].ToString();
                    string value = reader[1].ToString();

                    if (!name.StartsWith("system.", StringComparison.OrdinalIgnoreCase))
                    {
                        ConfigurationParameter item = new ConfigurationParameter(name, value);
                        list.Add(item);
                    }
                }
            }

            return list.ToArray();
        }
示例#8
0
文件: User.cs 项目: 0anion0/IBN
        public static User[] GetUsers(DBHelper dbh, int groupId, int alertGroupID)
        {
            List<User> list = new List<User>();

            using (IDataReader reader = dbh.RunTextDataReader("SELECT PrincipalId, Login, Password, FirstName, LastName, Email, Activity, salt, [hash] FROM [USERS] WHERE Login IS NOT NULL AND Password IS NOT NULL AND IsExternal = 0"))
            {
                while (reader.Read())
                {
                    User item = new User();

                    item.principalId = (int)reader["PrincipalId"];
                    item.login = reader["Login"].ToString();
                    item.password = reader["Password"].ToString();
                    item.firstName = reader["FirstName"].ToString();
                    item.lastName = reader["LastName"].ToString();
                    item.email = reader["Email"].ToString();

                    if (reader["salt"] != DBNull.Value)
                        item.salt = reader["salt"].ToString();

                    if (reader["hash"] != DBNull.Value)
                        item.hash = reader["hash"].ToString();

                    item.isActive = (byte)reader["Activity"] == 3;

                    if (string.Compare(item.login, "alert", StringComparison.OrdinalIgnoreCase) != 0)
                        item.imGroupId = groupId;
                    else
                        item.imGroupId = alertGroupID;

                    list.Add(item);
                }
            }

            return list.ToArray();
        }
示例#9
0
		private void ValidateDatabaseVersion(DBHelper dbHelper, Version requiredVersion, bool isSource)
		{
			using (DBTransaction tran = dbHelper.BeginTransaction())
			{
				Version currentVersion = new Version();

				using (IDataReader reader = dbHelper.RunTextDataReader("SELECT [Major],[Minor],[Build] FROM [DatabaseVersion]"))
				{
					if (reader.Read())
					{
						int major = (int)reader["Major"];
						int minor = (int)reader["Minor"];
						int build = (int)reader["Build"];

						currentVersion = new Version(major, minor, build);
					}
				}

				if (currentVersion != requiredVersion)
				{
					string databaseType;
					string advise;

					if (isSource)
					{
						databaseType = "Source";
						if (currentVersion < requiredVersion)
							advise = "Update IBN 4.5 to the required version.";
						else
							advise = "Update IBN 4.7 to the latest version or wait for the next update if you already have the latest version.";
					}
					else
					{
						databaseType = "Target";
						advise = "Select different database.";
					}

					throw new IbnConverterException(string.Format("{0} database {1}.{2} has unsupported version {3}. Required version is {4}. {5}"
						, databaseType, tran.SqlTran.Connection.DataSource, tran.SqlTran.Connection.Database, currentVersion, requiredVersion, advise)
						);
				}
			}
		}
示例#10
0
文件: TTEntry.cs 项目: 0anion0/IBN
        public static IDictionary<int, TTEntry> LoadList(DBHelper source)
        {
            Dictionary<int, TTEntry> ret = new Dictionary<int, TTEntry>();
            using (IDataReader reader = source.RunTextDataReader("SELECT * FROM [TIMESHEETS]"))
            {
                while (reader.Read())
                {
                    TTEntry item = Load(reader);
                    if (!ret.ContainsKey(item._timeSheetId))
                        ret.Add(item._timeSheetId, item);
                }
            }

            foreach (TTEntry entry in ret.Values)
            {
                string table = null;
                string field = null;

                switch (entry._objectTypeId)
                {
                    case 3:
                        table = "PROJECTS";
                        field = "ProjectId";
                        break;
                    case 4:
                        table = "EVENTS";
                        field = "EventId";
                        break;
                    case 5:
                        table = "TASKS";
                        field = "TaskId";
                        break;
                    case 6:
                        table = "TODO";
                        field = "ToDoId";
                        break;
                    case 7:
                        table = "INCIDENTS";
                        field = "IncidentId";
                        break;
                    case 11:
                        table = "TIMESHEET_TODO";
                        field = "TimeSheetToDoId";
                        break;
                    case 16:
                        table = "DOCUMENTS";
                        field = "DocumentId";
                        break;
                }

                if (table != null && field != null)
                {
                    object title = source.RunTextScalar(string.Format(CultureInfo.InvariantCulture, "SELECT [Title] FROM [{0}] WHERE [{1}] = @p1", table, field), DBHelper.MP("@p1", SqlDbType.Int, entry._objectId));
                    if (title != null && title != DBNull.Value)
                    {
                        entry._title = title.ToString();
                    }
                    else
                    {
                        entry._objectTypeId = -1;
                        entry._objectId = -1;
                        entry._title = string.Format(CultureInfo.InvariantCulture, "#{0}", entry._timeSheetId);
                    }
                }
            }

            return ret;
        }
示例#11
0
文件: Project.cs 项目: 0anion0/IBN
        public static IDictionary<int, Project> LoadList(DBHelper source)
        {
            Dictionary<int, Project> ret = new Dictionary<int, Project>();

            using (IDataReader reader = source.RunTextDataReader("SELECT [ProjectId],[Title],[StatusId],[ManagerId],[ExecutiveManagerId] FROM [PROJECTS]"))
            {
                while (reader.Read())
                {
                    Project item = Load(reader);
                    if (!ret.ContainsKey(item._projectId))
                        ret.Add(item._projectId, item);
                }
            }

            foreach (Project project in ret.Values)
            {
                using (IDataReader reader = source.RunTextDataReader("SELECT [PrincipalId],[IsTeamMember],[IsSponsor],[IsStakeHolder] FROM [PROJECT_MEMBERS] WHERE [ProjectId]=@p1", DBHelper.MP("@p1", SqlDbType.Int, project._projectId)))
                {
                    while (reader.Read())
                    {
                        int principalId = (int)reader["PrincipalId"];

                        if ((bool)reader["IsTeamMember"])
                            project._teamMembers.Add(principalId);

                        if ((bool)reader["IsSponsor"])
                            project._sponsors.Add(principalId);

                        if ((bool)reader["IsStakeHolder"])
                            project._stakeholders.Add(principalId);
                    }
                }
            }

            return ret;
        }
示例#12
0
		private static void UpdateRecord(string tableName, string sourceCondition, string targetCondition, ArrayList skip, DBHelper source, DBHelper target)
		{
			string colName;
			DataTable dt;
			bool isIdentity;

			ArrayList columns = new ArrayList();
			SqlCommand cmd = new SqlCommand();

			cmd.CommandType = CommandType.Text;

			using (IDataReader reader = source.RunTextDataReader(string.Format(CultureInfo.InvariantCulture, "SELECT * FROM [{0}] {1}", tableName, sourceCondition)))
			{
				dt = reader.GetSchemaTable();
				foreach (DataRow row in dt.Rows)
				{
					colName = (string)row["ColumnName"];
					if (!skip.Contains(colName) && CheckColumn(target, cmd, tableName, colName, out isIdentity))
						columns.Add(colName);
				}
			}
			StringBuilder sb = new StringBuilder();
			StringBuilder sb2 = new StringBuilder();

			sb.Append("SELECT ");
			sb2.Append("UPDATE [");
			sb2.Append(tableName);
			sb2.Append("] SET ");

			for (int i = 0; i < columns.Count; i++)
			{
				colName = (string)columns[i];
				if (i > 0)
				{
					sb.Append(", ");
					sb2.Append(", ");
				}
				sb.Append("[");
				sb.Append(colName);
				sb.Append("]");

				sb2.Append("[");
				sb2.Append(colName);
				sb2.Append("] = @p");
				sb2.Append(i);
			}
			sb.Append(" FROM [");
			sb.Append(tableName);
			sb.Append("] ");
			sb.Append(sourceCondition);

			sb2.Append(" ");
			sb2.Append(targetCondition);

			string selectCommand = sb.ToString();
			string updateCommand = sb2.ToString();

			// Read data from source and update target
			using (IDataReader reader = source.RunTextDataReader(selectCommand))
			{
				dt = reader.GetSchemaTable();
				cmd.CommandText = updateCommand;
				cmd.Parameters.Clear();

				if (reader.Read())
				{
					// Create parameters
					for (int i = 0; i < columns.Count; i++)
					{
						cmd.Parameters.AddWithValue(string.Format(CultureInfo.InvariantCulture, "@p{0}", i), GetColumnValue((string)columns[i], reader[i], null, null));
						if ((Type)dt.Rows[i]["DataType"] == typeof(byte[]))
							cmd.Parameters[i].SqlDbType = SqlDbType.Binary;
					}
					target.RunCmd(cmd);
				}
			}
		}
示例#13
0
文件: TTBlock.cs 项目: 0anion0/IBN
 public static IDictionary<int, TTBlock> LoadList(DBHelper source)
 {
     Dictionary<int, TTBlock> ret = new Dictionary<int,TTBlock>();
     using (IDataReader reader = source.RunTextDataReader("SELECT T.*, P.Title, S.ProjectSpreadSheetId FROM [WeekTimeSheet] T LEFT JOIN [PROJECTS] P ON P.ProjectId = T.ProjectId LEFT JOIN [ProjectSpreadSheet] S ON S.ProjectId = T.ProjectId"))
     {
         while (reader.Read())
         {
             TTBlock item = Load(reader);
             if (!ret.ContainsKey(item._weekTimeSheetId))
                 ret.Add(item._weekTimeSheetId, item);
         }
     }
     return ret;
 }
示例#14
0
		private static NameValueCollection LoadList(DBHelper source, string commandText)
		{
			NameValueCollection ret = new NameValueCollection();
			using (IDataReader reader = source.RunTextDataReader(commandText))
			{
				while (reader.Read())
				{
					ret.Add(reader["ItemId"].ToString(), reader["ItemName"].ToString());
				}
			}
			return ret;
		}
示例#15
0
		private void CopyTable(string sourceTableName, string targetTableName, NameValueCollection columnsMapping, string selPrefix, string selColumns, string selCondition, bool copyBinary, DBHelper source, DBHelper target, IList<StringCollection> nameLists, IList<Hashtable> valueHashTables, bool insertIdentity, Hashtable identities)
		{
			SendProgress("Copying data from table {0} to table {1}", sourceTableName, targetTableName);

			StringBuilder sb = new StringBuilder();
			StringBuilder sb2 = new StringBuilder();
			SqlCommand cmd = new SqlCommand();

			cmd.CommandType = CommandType.Text;

			DataTable dt;
			Type dataType;
			bool isIdentity, hasIdentity = false;
			string selectCommand;
			string insertCommand;

			ArrayList columnTypes = new ArrayList();
			ArrayList sourceColumns = new ArrayList();
			ArrayList targetColumns = new ArrayList();
			ArrayList sourceBinColumns = new ArrayList();
			ArrayList targetBinColumns = new ArrayList();
			Hashtable binIdentities = new Hashtable();
			string sourceIdentityColumn = null, targetIdentityColumn = null;
			int identityIndex = -1;
			string sourceColumnName, targetColumnName;

			// Get column names to be inserted
			selectCommand = string.Format(CultureInfo.InvariantCulture, "SELECT {0}{1} FROM [{2}] {3}", selPrefix, selColumns, sourceTableName, selCondition);
			using (IDataReader reader = source.RunTextDataReaderSchemaOnly(selectCommand))
			{
				dt = reader.GetSchemaTable();
				foreach (DataRow row in dt.Rows)
				{
					sourceColumnName = (string)row["ColumnName"];
					targetColumnName = GetTargetColumn(sourceColumnName, columnsMapping);
					dataType = (Type)row["DataType"];

					// Check if column exists and is identity
					if (CheckColumn(target, cmd, targetTableName, targetColumnName, out isIdentity))
					{
						if (isIdentity)
						{
							hasIdentity = true;
							sourceIdentityColumn = sourceColumnName;
							targetIdentityColumn = targetColumnName;
						}

						if (dataType == typeof(byte[]))
						{
							sourceBinColumns.Add(sourceColumnName);
							targetBinColumns.Add(targetColumnName);
						}
						else
						{
							columnTypes.Add(dataType);
							sourceColumns.Add(sourceColumnName);
							targetColumns.Add(targetColumnName);
						}
					}
				}
			}

			// Build select command
			sb.Append("SELECT ");
			int n = 0;
			foreach (string colName in sourceColumns)
			{
				if (n > 0)
					sb.Append(", ");
				sb.Append(selPrefix);
				sb.Append("[");
				sb.Append(colName);
				sb.Append("]");
				n++;
			}
			sb.Append(" FROM [");
			sb.Append(sourceTableName);
			sb.Append("] ");
			sb.Append(selCondition);

			// Build insert command
			sb2.Append("INSERT INTO [");
			sb2.Append(targetTableName);
			sb2.Append("] (");
			int j = n = 0;
			foreach (string colName in targetColumns)
			{
				if (colName == targetIdentityColumn)
					identityIndex = j;
				if (insertIdentity || identityIndex != j)
				{
					if (n > 0)
						sb2.Append(", ");
					sb2.Append("[");
					sb2.Append(colName);
					sb2.Append("]");
					n++;
				}
				j++;
			}
			sb2.Append(") VALUES (");
			n = 0;
			for (int i = 0; i < targetColumns.Count; i++)
			{
				if (insertIdentity || identityIndex != i)
				{
					if (n > 0)
						sb2.Append(", ");
					sb2.Append("@p");
					sb2.Append(i);
					n++;
				}
			}
			sb2.Append(")");

			if (hasIdentity && !insertIdentity)
				sb2.Append(" SELECT @@IDENTITY");

			selectCommand = sb.ToString();
			insertCommand = sb2.ToString();

			// Read data from source and insert into target
			using (DBTransaction tran = target.BeginTransaction())
			{
				object identity;
				using (IDataReader reader = source.RunTextDataReader(selectCommand))
				{
					dt = reader.GetSchemaTable();
					if (insertIdentity && hasIdentity)
						SetInsertIdentity(target, targetTableName, true);

					try
					{
						cmd.CommandText = insertCommand;

						while (reader.Read())
						{
							if (cmd.Parameters.Count == 0)
							{
								// Create parameters
								for (int i = 0; i < targetColumns.Count; i++)
								{
									SqlParameter p = cmd.Parameters.AddWithValue(string.Format(CultureInfo.InvariantCulture, "@p{0}", i), GetColumnValue((string)sourceColumns[i], reader[i], nameLists, valueHashTables));
									if (columnTypes[i] == typeof(Decimal))
										p.DbType = DbType.Decimal;
								}
							}
							else
							{
								// Set values
								for (int i = 0; i < targetColumns.Count; i++)
								{
									cmd.Parameters[i].Value = GetColumnValue((string)sourceColumns[i], reader[i], nameLists, valueHashTables);
								}
							}
							identity = target.RunCmdScalar(cmd);
							if (hasIdentity)
							{
								object oldIdentity = reader[identityIndex];
								if (insertIdentity)
									binIdentities[oldIdentity] = oldIdentity;
								else
									binIdentities[oldIdentity] = identity;
								if (!insertIdentity && identities != null)
									identities[oldIdentity] = identity;
							}
						}
					}
					finally
					{
						if (insertIdentity && hasIdentity)
							SetInsertIdentity(target, targetTableName, false);
					}
				}
				tran.Commit();
			}

			// Copy binary and image fields
			if (copyBinary)
			{
				if (sourceIdentityColumn != null && sourceBinColumns.Count > 0)
				{
					SqlParameter paramTextPtr = DBHelper.MP("@ptr", SqlDbType.VarBinary, 16, null);

					SqlParameter paramData = new SqlParameter("@data", SqlDbType.VarBinary);
					paramData.Value = _buffer;

					SqlParameter paramId = new SqlParameter();
					paramId.ParameterName = "@id";

					foreach (object id in binIdentities.Keys)
					{
						paramId.Value = binIdentities[id];

						for (int i = 0; i < sourceBinColumns.Count; i++)
						{
							CopyBinaryData(source, sourceTableName, (string)sourceBinColumns[i], sourceIdentityColumn, id,
								target, targetTableName, (string)targetBinColumns[i], targetIdentityColumn,
								cmd, paramTextPtr, paramData, paramId);
						}
					}
				}
			}
			SendProgress("Done");
		}
示例#16
0
文件: ListInfo45.cs 项目: 0anion0/IBN
        /// <summary>
        /// Loads the list types.
        /// </summary>
        private static void LoadListTypes(DBHelper source)
        {
            _listTypes.Clear();
            //if (_listTypes != null)
            //    throw new ArgumentException("Invalid call. LoadListTypes must be called once.");

            //_listTypes = new Dictionary<int, string>();
            using (IDataReader reader = source.RunTextDataReader("SELECT * FROM [LIST_TYPES]"))
            {
                while (reader.Read())
                {
                    string listTypeName = (string)reader["TypeName"];
                    int listTypeId = (int)reader["TypeId"];

                    _listTypes.Add(listTypeId, listTypeName);
                }
            }
        }
示例#17
0
        internal void LoadExtendedInfo(DBHelper dbHelper)
        {
            try
            {
                dbHelper.Database = Database;

                DatabaseSize = 8 * Convert.ToInt32(dbHelper.RunTextScalar("SELECT SUM([size]) FROM [sysfiles] WHERE ([status] & 0x42) = 2"), CultureInfo.InvariantCulture) / 1024; // size in Megabytes
                using (IDataReader reader = dbHelper.RunTextDataReader("SELECT [State],[Build] FROM [DatabaseVersion] WITH (NOLOCK)"))
                {
                    reader.Read();
                    DatabaseState = Convert.ToInt32(reader["State"], CultureInfo.InvariantCulture);
                    DatabaseVersion = Convert.ToInt32(reader["Build"], CultureInfo.InvariantCulture);
                }

                if (DatabaseState == 6) // Ready
                {
                    _defaultLanguage.Load(dbHelper);
                    InternalUsersCount = Convert.ToInt32(dbHelper.RunTextScalar("SELECT COUNT(*) FROM [USERS] WHERE [Activity]=3 AND [IsExternal]=0"), CultureInfo.InvariantCulture);
                    ExternalUsersCount = Convert.ToInt32(dbHelper.RunTextScalar("SELECT COUNT(*) FROM [USERS] WHERE [Activity]=3 AND [IsExternal]=1"), CultureInfo.InvariantCulture);
                }
            }
            finally
            {
                dbHelper.Database = null;
            }
        }
示例#18
0
		private static void ConvertLists(DBHelper source, DBHelper target)
		{
			#region Copy LIST_FOLDERS to cls_ListFolder

			IDictionary<int, ListFolder> folders = ListFolder.LoadList(source);
			ListFolder.SaveList(target, folders);

			#endregion

			//load list45
			IDictionary<int, ListInfo45> lists45 = ListInfo45.LoadList(source);

			#region LIST_TYPES [4.5] -> ListType enum[4.7]

			//Get metaType for ListType meta field
			MD47.Meta.Management.MetaFieldType mfTypeListType47 = Mediachase.Ibn.Lists.ListInfo.GetAssignedMetaClass().Fields["ListType"].GetMetaType();

			// Delete old values
			foreach (MD47.Meta.MetaEnumItem enumItem47 in mfTypeListType47.EnumItems)
			{
				MD47.Meta.Management.MetaEnum.RemoveItem(mfTypeListType47, enumItem47.Handle);
			}

			//create listTypes in 47
			int orderId = 1;
			foreach (string listTypeName45 in ListInfo45.ListTypes.Values)
			{
				MD47.Meta.Management.MetaEnum.AddItem(mfTypeListType47, listTypeName45, orderId++);
			}

			#endregion

			Dictionary<int, int> listId45to47 = new Dictionary<int, int>();

			#region List[4.5] -> ListInfo[4.7]

			foreach (ListInfo45 listInfo45 in lists45.Values)
			{
				Mediachase.Ibn.Lists.ListInfo listInfo47 = Mediachase.Ibn.Lists.ListManager.CreateList(listInfo45.FolderId, listInfo45.Title);

				listInfo47.Properties["ListType"].Value = ListInfo45.ListTypes[listInfo45.TypeId];
				listInfo47.Description = listInfo45.Description;
				listInfo47.Created = listInfo45.CreationDate;
				listInfo47.CreatorId = listInfo45.CreatorId;
				listInfo47.Status = listInfo45.StatusId;

				listInfo47.Save();

				//List_{0}[4.5] -> List_{0}[4.6]
				MD47.Meta.Management.MetaClass mcList47 = Mediachase.Ibn.Lists.ListManager.GetListMetaClass(listInfo47);
				MD45.Configurator.MetaClass mcList45 = MD45.Configurator.MetaClass.Load(string.Format(CultureInfo.InvariantCulture, "ListsEx_{0}", listInfo45.ListId));

				foreach (MD45.Configurator.MetaField mfFix in mcList45.MetaFields)
				{
					MD45.Configurator.MetaDictionary dic = mfFix.Dictionary;
				}
				MetadataPlusToMetadataConverter metaDataConverter = new MetadataPlusToMetadataConverter(mcList45, mcList47);
				metaDataConverter.CopyObjects(null);
				metaDataConverter.CopyViewPreferences();

				Mediachase.Ibn.Lists.ListManager.CreateDefaultForm(mcList47);

				listId45to47.Add(listInfo45.ListId, listInfo47.PrimaryKeyId.Value);
			}

			#endregion

			#region Convert list templates

			foreach (MD45.Configurator.MetaClass mcList45 in MD45.Configurator.MetaClass.GetList("Mediachase.IBN40.ListTemplate", true))
			{
				string templateName = string.IsNullOrEmpty(mcList45.FriendlyName) ? mcList45.Name : mcList45.FriendlyName;

				Mediachase.Ibn.Lists.ListInfo mcListInfo47 = Mediachase.Ibn.Lists.ListManager.CreateTemplate(templateName);
				mcListInfo47.Description = mcList45.Description;
				mcListInfo47.Save();

				//ListTemplate{0}[4.5] -> List_{0}[4.7]
				MD47.Meta.Management.MetaClass mcList47 = Mediachase.Ibn.Lists.ListManager.GetListMetaClass(mcListInfo47);

				foreach (MD45.Configurator.MetaField mfFix in mcList45.MetaFields)
				{
					MD45.Configurator.MetaDictionary dic = mfFix.Dictionary;
				}
				MetadataPlusToMetadataConverter metaDataConverter = new MetadataPlusToMetadataConverter(mcList45, mcList47);
				metaDataConverter.CopyObjects(null);
				metaDataConverter.CopyViewPreferences();
			}

			#endregion

			#region Copy access restrictions.

			target.RunText("DELETE [LISTINFO_ACCESS]");
			using (IDataReader reader = source.RunTextDataReader("SELECT [ListId],[PrincipalId],[AllowLevel] FROM [LIST_ACCESS]"))
			{
				while (reader.Read())
				{
					int listId45 = (int)reader["ListId"];
					int principalId = (int)reader["PrincipalId"];
					byte allowLevel = (byte)reader["AllowLevel"];

					if (listId45to47.ContainsKey(listId45))
					{
						int listId47 = listId45to47[listId45];
						target.RunText(
							"INSERT INTO [LISTINFO_ACCESS] ([ListId],[PrincipalId],[AllowLevel]) VALUES (@1,@2,@3)"
						, DBHelper.MP("@1", SqlDbType.Int, listId47)
						, DBHelper.MP("@2", SqlDbType.Int, principalId)
						, DBHelper.MP("@3", SqlDbType.TinyInt, allowLevel)
						);
					}
				}
			}

			#endregion
		}
示例#19
0
		public void Convert(int sourceCompanyId, int targetCompanyId)
		{
			bool convertAll = true;

			DBHelper source = new DBHelper(_sourceConnectionString);
			DBHelper target = new DBHelper(_targetConnectionString);
			source.CommandTimeout = target.CommandTimeout = _sqlCommandTimeout;

			#region Validate databases' versions

			ValidateDatabaseVersion(source, RequiredSourceVersion, true);
			ValidateDatabaseVersion(target, RequiredTargetVersion, false);

			string sourcePortalDatabase = GetPortalDB(source, sourceCompanyId);
			string targetPortalDatabase = GetPortalDB(target, targetCompanyId);

			source.Database = sourcePortalDatabase;
			target.Database = targetPortalDatabase;

			ValidateDatabaseVersion(source, RequiredSourceVersion, true);
			ValidateDatabaseVersion(target, RequiredTargetVersion, false);

			source.Database = null;
			target.Database = null;

			#endregion

			#region Declare variables

			XmlDocument doc = new XmlDocument();
			string tableName, selectCommand;
			List<StringCollection> nameLists = new List<StringCollection>();
			List<Hashtable> valueHashTables = new List<Hashtable>();

			StringCollection namesCompanyId = new StringCollection();
			StringCollection namesImGroupId = new StringCollection();
			StringCollection namesUserId = new StringCollection();
			StringCollection namesChatId = new StringCollection();

			Hashtable valuesCompanyId = new Hashtable();
			Hashtable valuesImGroupId = new Hashtable();
			Hashtable valuesUserId = new Hashtable();
			Hashtable valuesChatId = new Hashtable();

			nameLists.Add(namesCompanyId);
			nameLists.Add(namesImGroupId);
			nameLists.Add(namesUserId);
			nameLists.Add(namesChatId);

			valueHashTables.Add(valuesCompanyId);
			valueHashTables.Add(valuesImGroupId);
			valueHashTables.Add(valuesUserId);
			valueHashTables.Add(valuesChatId);

			namesCompanyId.Add("company_id");
			namesImGroupId.Add("imgroup_id");
			namesImGroupId.Add("dep_imgroup_id");
			namesImGroupId.Add("imgroupid");
			namesUserId.Add("user_id");
			namesUserId.Add("from_user_id");
			namesUserId.Add("to_user_id");
			namesUserId.Add("owner_id");
			namesUserId.Add("cont_user_id");
			namesUserId.Add("originalid");
			namesChatId.Add("chat_id");
			#endregion

			if (convertAll)
			{
				#region Convert Main DB
				SendProgress("*** Converting main database ***");
				SendProgress("Deleting target company data");

				target.RunSP("ASP_EmptyTables",
					DBHelper.MP("@company_id", SqlDbType.Int, targetCompanyId),
					DBHelper.MP("@delete_trial_requests", SqlDbType.Bit, true));

				SendProgress("Done");

				doc.Load("ConvertMain.xml");
				foreach (XmlNode table in doc.SelectNodes("/tables/table"))
				{
					bool copyBinary = true;
					{
						XmlAttribute attr = table.Attributes["copyBinary"];
						if (attr != null)
							copyBinary = bool.Parse(attr.Value);
					}

					tableName = table.Attributes["name"].Value;
					switch (tableName)
					{
						case "COMPANIES":
							valuesCompanyId[sourceCompanyId] = targetCompanyId;
							ArrayList skip = new ArrayList();
							skip.Add("company_id");
							skip.Add("domain");
							skip.Add("db_name");
							skip.Add("app_id");
							UpdateRecord(tableName, string.Format(CultureInfo.InvariantCulture, "WHERE [company_id] = {0}", sourceCompanyId), string.Format(CultureInfo.InvariantCulture, "WHERE [company_id] = {0}", targetCompanyId), skip, source, target);
							break;
						case "IMGROUPS":
							selectCommand = string.Format(CultureInfo.InvariantCulture, "WHERE company_id={1}", tableName, sourceCompanyId);
							CopyTable(tableName, "", "*", selectCommand, copyBinary, source, target, nameLists, valueHashTables, false, valuesImGroupId);
							break;
						case "USER":
							selectCommand = string.Format(CultureInfo.InvariantCulture, "U JOIN IMGROUPS G ON (G.imgroup_id = U.imgroup_id) WHERE G.company_id = {1}", tableName, sourceCompanyId);
							CopyTable(tableName, "U.", "*", selectCommand, copyBinary, source, target, nameLists, valueHashTables, false, valuesUserId);
							break;
						case "CHATS":
							selectCommand = string.Format(CultureInfo.InvariantCulture, "C JOIN [USER] U ON (U.user_id = C.owner_id) JOIN IMGROUPS G ON (G.imgroup_id = U.imgroup_id) WHERE G.company_id = {1}", tableName, sourceCompanyId);
							CopyTable(tableName, "C.", "*", selectCommand, copyBinary, source, target, nameLists, valueHashTables, false, valuesChatId);
							break;

						case "BINARY_DATA":
							selectCommand = string.Format(CultureInfo.InvariantCulture, "WHERE [fid] IN (SELECT D2.file_id FROM [FILE] D2 JOIN [USER] U1 ON (U1.user_id = D2.from_user_id) JOIN IMGROUPS G1 ON (G1.imgroup_id = U1.imgroup_id) JOIN [USER] U2 ON (U2.user_id = D2.to_user_id) JOIN IMGROUPS G2 ON (G2.imgroup_id = U2.imgroup_id) WHERE G1.company_id = {0} AND G2.company_id = {0})", sourceCompanyId);
							CopyTable(tableName, "", "*", selectCommand, copyBinary, source, target, nameLists, valueHashTables, false, null);
							break;
						case "CONTACT_LIST":
							selectCommand = string.Format(CultureInfo.InvariantCulture, "D2 JOIN [USER] U1 ON (U1.user_id = D2.user_id) JOIN IMGROUPS G1 ON (G1.imgroup_id = U1.imgroup_id) JOIN [USER] U2 ON (U2.user_id = D2.cont_user_id) JOIN IMGROUPS G2 ON (G2.imgroup_id = U2.imgroup_id) WHERE G1.company_id = {1} AND G2.company_id = {1}", tableName, sourceCompanyId);
							CopyTable(tableName, "D2.", "*", selectCommand, copyBinary, source, target, nameLists, valueHashTables, false, null);
							break;
						case "DEPENDENCES":
							selectCommand = string.Format(CultureInfo.InvariantCulture, "D JOIN IMGROUPS G1 ON (G1.imgroup_id = D.imgroup_id) JOIN IMGROUPS G2 ON (G2.imgroup_id = D.DEP_IMGROUP_ID) WHERE G1.company_id = {1} AND G2.company_id = {1}", tableName, sourceCompanyId);
							CopyTable(tableName, "D.", "*", selectCommand, copyBinary, source, target, nameLists, valueHashTables, false, null);
							break;
						case "CHAT_USERS":
							selectCommand = string.Format(CultureInfo.InvariantCulture, "D2 JOIN [USER] U1 ON (U1.user_id = D2.user_id) JOIN IMGROUPS G1 ON (G1.imgroup_id = U1.imgroup_id) JOIN [USER] U2 ON (U2.user_id = D2.from_user_id) JOIN IMGROUPS G2 ON (G2.imgroup_id = U2.imgroup_id) WHERE G1.company_id = {1} AND G2.company_id = {1}", tableName, sourceCompanyId);
							CopyTable(tableName, "D2.", "*", selectCommand, copyBinary, source, target, nameLists, valueHashTables, false, null);
							break;

						case "AUTH_LIST":
						case "FILE":
						case "USER_MESS":
							selectCommand = string.Format(CultureInfo.InvariantCulture, "D2 JOIN [USER] U1 ON (U1.user_id = D2.from_user_id) JOIN IMGROUPS G1 ON (G1.imgroup_id = U1.imgroup_id) JOIN [USER] U2 ON (U2.user_id = D2.to_user_id) JOIN IMGROUPS G2 ON (G2.imgroup_id = U2.imgroup_id) WHERE G1.company_id = {1} AND G2.company_id = {1}", tableName, sourceCompanyId);
							CopyTable(tableName, "D2.", "*", selectCommand, copyBinary, source, target, nameLists, valueHashTables, false, null);
							break;

						case "PORTAL_SESSIONS":
						case "SESSIONS":
						case "STATUS_LOG":
						case "CHAT_MESS":
							selectCommand = string.Format(CultureInfo.InvariantCulture, "D1 JOIN [USER] U ON (U.user_id = D1.user_id) JOIN IMGROUPS G ON (G.imgroup_id = U.imgroup_id) WHERE G.company_id = {1}", tableName, sourceCompanyId);
							CopyTable(tableName, "D1.", "*", selectCommand, copyBinary, source, target, nameLists, valueHashTables, false, null);
							break;
					}
				}

				SendProgress("Hashing passwords...");
				HashPasswords(target, "USER", "USER_ID", "PASSWORD");
				SendProgress("Done");

				SendProgress("*** Done ***");
				#endregion
			}

			#region Convert portal DB
			SendProgress("*** Converting portal database ***");

			source.Database = sourcePortalDatabase;
			target.Database = targetPortalDatabase;

			if (convertAll)
			{
				SqlCommand cmd = new SqlCommand();
				cmd.CommandType = CommandType.Text;

				doc.Load("ConvertPortal.xml");
				XmlNodeList tablesCopy = doc.SelectNodes("/tables/table");

				#region Clear tables in reversed order

				ClearTables(tablesCopy, target);

				#endregion

				#region Load calendars for imported projects
				Hashtable calendars = new Hashtable();
				using (IDataReader reader = source.RunTextDataReader("SELECT CalendarId, ProjectId FROM [CALENDARS] WHERE ProjectId IS NOT NULL"))
				{
					while (reader.Read())
					{
						calendars[reader[0]] = reader[1];
					}
				}
				#endregion

				#region Copy tables

				CopyPortalTables(1, 1, tablesCopy, source, target, nameLists, valueHashTables);

				#endregion

				#region Update ProjectId column for CALENDARS
				SendProgress("Updating project calendars");

				foreach (object key in calendars.Keys)
				{
					object projectId = calendars[key];
					target.RunTextDataReader("UPDATE [CALENDARS] SET ProjectId=@pid WHERE CalendarId=@cid"
						, DBHelper.MP("@pid", SqlDbType.Int, projectId)
						, DBHelper.MP("@cid", SqlDbType.Int, key)
						);
				}

				SendProgress("Done");
				#endregion

				#region Copy meta data
				SendProgress("* Copying metadata *");

				// Load meta classes
				ArrayList metaClasses = MyMetaClass.LoadList(source);

				StringBuilder sbMetaClassesToDelete = new StringBuilder();

				// Load meta fields, create and copy tables
				foreach (MyMetaClass mc in metaClasses)
				{
					if (mc.Name.StartsWith("ListsEx_", StringComparison.Ordinal) || mc.Name.StartsWith("ListTemplate_", StringComparison.Ordinal))
					{
						if(sbMetaClassesToDelete.Length > 0)
							sbMetaClassesToDelete.Append(",");
						sbMetaClassesToDelete.Append(mc.MetaClassId.ToString(CultureInfo.InvariantCulture));
					}
					else
					{
						mc.LoadFields(source);

						SendProgress("Creating tables for MetaData class: {0}", mc.Name);

						mc.CreateTables(target);

						SendProgress("Done");

						selectCommand = "";//string.Format("SELECT * FROM [{0}]", mc.TableName);
						CopyTable(mc.TableName, "", "*", selectCommand, true, source, target, null, null, true, null);
						CopyTable(mc.TableNameHistory, "", "*", selectCommand, true, source, target, null, null, true, null);
					}
				}

				string metaClassesToDelete = sbMetaClassesToDelete.ToString();
				if (!string.IsNullOrEmpty(metaClassesToDelete))
				{
					target.RunText(string.Concat("DELETE FROM [MetaClassMetaFieldRelation] WHERE [MetaClassId] IN (", metaClassesToDelete, ")"));
					target.RunText(string.Concat("DELETE FROM [MetaClass] WHERE [MetaClassId] IN (", metaClassesToDelete, ")"));
				}

				string defaultLocale = (string)source.RunTextScalar("SELECT [Locale] FROM [LANGUAGES] WHERE [IsDefault] = 1");
				using (DBTransaction tran = target.BeginTransaction())
				{
					//target.RunText("DROP TABLE [OrganizationsEx]");
					//target.RunText("DROP TABLE [OrganizationsEx_History]");
					Mediachase.MetaDataPlus.Configurator.MetaInstaller.RestoreFromFile(tran.SqlTran, string.Format(CultureInfo.InvariantCulture, "metadata_{0}.xml", defaultLocale));

					tran.Commit();
				}

				SendProgress("* Done *");
				#endregion

				#region Copy GROUPS to cls_Principal

				using (IDataReader reader = source.RunTextDataReader("SELECT [PrincipalId], [GroupName] FROM [GROUPS] WHERE [PrincipalId] > 9"))
				{
					while (reader.Read())
					{
						int principalId = (int)reader["PrincipalId"];
						string groupName = reader["GroupName"].ToString();

						target.RunText(
							"INSERT INTO [cls_Principal] ([PrincipalId],[Card],[Name],[Activity]) VALUES (@1,N'Department',@2,3)"
						, DBHelper.MP("@1", SqlDbType.Int, principalId)
						, DBHelper.MP("@2", SqlDbType.NVarChar, 100, groupName)
						);
					}
				}

				#endregion

				#region Copy USERS to cls_Principal

				using (IDataReader reader = source.RunTextDataReader("SELECT [PrincipalId], [FirstName], [LastName], [Activity] FROM [USERS]"))
				{
					while (reader.Read())
					{
						int principalId = (int)reader["PrincipalId"];
						string firstName = reader["FirstName"].ToString();
						string lastName = reader["LastName"].ToString();
						byte activity = (byte)reader["Activity"];

						target.RunText(
							"INSERT INTO [cls_Principal] ([PrincipalId],[Card],[Name],[Activity]) VALUES (@1,N'User',@2,@3)"
						, DBHelper.MP("@1", SqlDbType.Int, principalId)
						, DBHelper.MP("@2", SqlDbType.NVarChar, 100, lastName + ", " + firstName)
						, DBHelper.MP("@3", SqlDbType.Int, activity)
						);
					}
				}

				#endregion


				SendProgress("Hashing passwords...");
				HashPasswords(target, "USERS", "PrincipalId", "Password");
				SendProgress("Done");

				// Update ExpectedAssignDate for issues
				target.RunText("SET DATEFIRST 7 UPDATE [INCIDENTS] SET [ExpectedAssignDate] = [dbo].GetFinishDateByDuration(B.CalendarId, I.CreationDate, B.ExpectedAssignTime) FROM [INCIDENTS] I JOIN [IncidentBox] B ON (B.IncidentBoxId = I.IncidentBoxId)");

				#region Convert timesheets

				SendProgress("* Converting timesheets *");

				using (DBTransaction tran = target.BeginTransaction())
				{
					ConvertTimesheets(source, target);

					tran.Commit();
				}

				SendProgress("* Done *");

				#endregion
			}

			string installationDirectoryPath = @"..\"; // TODO: get from registry
			Mediachase.Ibn.GlobalContext.Current = new GlobalContext(System.IO.Path.Combine(installationDirectoryPath, @"Web\portal\Apps"));

			#region Convert lists

			SendProgress("* Converting lists *");

			using (MD47.DataContext dataContext47 = new MD47.DataContext(string.Empty))
			{
				// Initialize metadata
				MD47.DataContext.Current = dataContext47;
				dataContext47.SqlContext.CommandTimeout = _sqlCommandTimeout;
				//MD45.MetaDataContext.Current.ConnectionString = sourcePortalConnectionString;

				SqlTransaction previousSourceTransaction = MD45.MetaDataContext.Current.Transaction;
				SqlTransaction previousTargetTransaction = MD47.DataContext.Current.SqlContext.Transaction;
				SqlTransaction previousDatabaseTransaction = Mediachase.IBN.Database.DbContext.Current.Transaction;

				using (DBTransaction tranSource = source.BeginTransaction())
				using (DBTransaction tran = target.BeginTransaction())
				{
					MD45.MetaDataContext.Current.Transaction = tranSource.SqlTran;
					MD47.DataContext.Current.SqlContext.Transaction = tran.SqlTran;
					Mediachase.IBN.Database.DbContext.Current.Transaction = tran.SqlTran;
					try
					{
						ConvertLists(source, target);

						tran.Commit();
					}
					finally
					{
						MD45.MetaDataContext.Current.Transaction = previousSourceTransaction;
						MD47.DataContext.Current.SqlContext.Transaction = previousTargetTransaction;
						Mediachase.IBN.Database.DbContext.Current.Transaction = previousDatabaseTransaction;
					}
				}
			}

			SendProgress("* Done *");

			#endregion

			#region Convert contacts and organizations

			SendProgress("* Converting contacts and organizations *");

			ClientsConverter clientsConverter = new ClientsConverter(_sqlCommandTimeout);
			try
			{
				clientsConverter.Warning += new EventHandler<ClientsConverterEventArgs>(OnClientsConverterWarning);
				clientsConverter.Convert(source, target);
			}
			finally
			{
				clientsConverter.Warning -= OnClientsConverterWarning;
			}

			SendProgress("* Done *");

			#endregion

			target.RunText("DELETE [HISTORY] WHERE [ObjectTypeId] = 21 OR [ObjectTypeId] = 22");
			target.RunText("DELETE FROM [USER_SETTINGS] WHERE [Value] LIKE '%org%' OR [Value] LIKE '%vcard%' OR [Key] LIKE '%org%' OR [Key] LIKE '%vcard%'");

			SendProgress("*** Done ***");
			#endregion
		}
示例#20
0
		private static string GetPortalDB(DBHelper dbh, int companyId)
		{
			using (IDataReader reader = dbh.RunTextDataReader(string.Format(CultureInfo.InvariantCulture, "SELECT db_name FROM COMPANIES WHERE company_id={0}", companyId)))
			{
				reader.Read();
				return reader["db_name"].ToString();
			}
		}
示例#21
0
		private static void HashPasswords(DBHelper dbHelper, string tableName, string keyColumnName, string passwordColumnName)
		{
			Dictionary<string, string> passwords = new Dictionary<string, string>();

			// Read passwords from database
			string selectCommand = string.Format(CultureInfo.InvariantCulture, "SELECT [{0}],[{1}] FROM [{2}] WHERE [salt] IS NULL OR [hash] IS NULL", keyColumnName, passwordColumnName, tableName);
			using (IDataReader reader = dbHelper.RunTextDataReader(selectCommand))
			{
				while (reader.Read())
				{
					passwords.Add(reader[0].ToString(), reader[1].ToString());
				}
			}

			RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
			HashAlgorithm hashAlgorithm = MD5.Create();
			byte[] saltBytes = new byte[5];

			StringBuilder builder = new StringBuilder();

			foreach (string key in passwords.Keys)
			{
				string password = passwords[key];

				rng.GetBytes(saltBytes);
				string salt = System.Convert.ToBase64String(saltBytes);
				string hash = System.Convert.ToBase64String(hashAlgorithm.ComputeHash(Encoding.Unicode.GetBytes(string.Concat(password, "$", salt))));

				builder.Append("UPDATE [");
				builder.Append(tableName);
				builder.Append("] SET [salt]='");
				builder.Append(salt);
				builder.Append("',[hash]='");
				builder.Append(hash);
				builder.Append("' WHERE [");
				builder.Append(keyColumnName);
				builder.Append("]='");
				builder.Append(key);
				builder.Append("'");
				builder.AppendLine();
			}

			string updateCommand = builder.ToString();
			dbHelper.RunText(updateCommand);
		}
示例#22
0
文件: ListInfo45.cs 项目: 0anion0/IBN
        public static IDictionary<int, ListInfo45> LoadList(DBHelper source)
        {
            //Load all exists list types
            LoadListTypes(source);

            Dictionary<int, ListInfo45> ret = new Dictionary<int, ListInfo45>();

            using (IDataReader reader = source.RunTextDataReader("SELECT * FROM [LISTS]"))
            {
                while (reader.Read())
                {
                    ListInfo45 item = Load(reader);
                    if (!ret.ContainsKey(item._listId))
                        ret.Add(item._listId, item);
                }
            }

            return ret;
        }