Forums

Skip Navigation LinksHome / Developer Network / Forums / Sitefinity Older Versions (3.x): Set-up & Installation > Moving/Renaming files between different Sitefinity databases

Moving/Renaming files between different Sitefinity databases

  • Laurent avatar

    Posted on Jul 29, 2011 (permalink)

    Hi there,

    We wanted to build a new website in top of an existent SF instance.

    Warning : The following technique supposed you are familiar with the Sitefinity database and with user-defined function in SQL (CLR). If not, do not attempt to use it, you can break everything in your Images & Documents Library !

    We renamed the files already uploaded in Images and Documents (it was quite a mess).
    To do so
      - Get a copy of the files
      - Rename it on the file system correctly
      - Batch uploaded them to the new DB with correct categories and tags.

    The problem was the upload date. How to change the original date to keep this information ?

    To do so, we used a Hash technique, based on CLR.

    Create a new SQLServerProject to deploy the user defined functions
    using System;
    using System.Data;
    using System.Data.SqlClient;
    using System.Data.SqlTypes;
    using Microsoft.SqlServer.Server;
    using System.Security.Cryptography;
     
    public partial class UserDefinedFunctions
    {
     
        private static HashAlgorithm GetHashAlgotithm(string HashAlgorithmName)
        {
            switch (HashAlgorithmName.ToUpperInvariant())
            {
                case "MD5": return MD5.Create();
                case "SHA1": return SHA1.Create();
                case "SHA256": return SHA256.Create();
                default: throw new ArgumentOutOfRangeException("HashType",
    "Don't know how to create a '" + HashAlgorithmName + "' hash.");
            }
        }
         
        [Microsoft.SqlServer.Server.SqlFunction(DataAccess = DataAccessKind.None, IsDeterministic = true, SystemDataAccess = SystemDataAccessKind.None)]
        public static SqlBinary Hash(SqlBytes Source, SqlString HashAlgorithmName)
        {
            if (Source.IsNull)
                return null;
            HashAlgorithm ha = GetHashAlgotithm(HashAlgorithmName.Value);
            SqlBinary theHash = new SqlBinary(ha.ComputeHash(Source.Stream));
            return theHash;
        }
    };

    Secondly, you can use this function in SQL to compute files hash and get information you need.
    select a.id,LoweredUrl,DateCreatedLoc, dbo.HashStream(ContentValue, 'md5'as MD5
    from sitefinity.dbo.sf_CmsBinaryContent a
    left outer join sitefinity.dbo.sf_CmsContentBase b  on a.id=b.id
    left outer join sitefinity.dbo.sf_CmsContentVersion c   on a.id=c.id

    All you got to do is to use a inner join between databases to update the creation date.
    Et voilà !

    Thanks to Walden : http://blog.waldenl.com/2009/12/computing-md5-hash-of-varbinarymax-in.html

    Reply

  • Radoslav Georgiev Radoslav Georgiev admin's avatar

    Posted on Aug 3, 2011 (permalink)

    Hi Mariano,

    Thank you for sharing your code with our community. I have updated your Telerik Points.

    Greetings,
    Radoslav Georgiev
    the Telerik team
    Do you want to have your say in the Sitefinity development roadmap? Do you want to know when a feature you requested is added or when a bug fixed? Explore the Telerik Public Issue Tracking system and vote to affect the priority of the items

    Reply

Skip Navigation LinksHome / Developer Network / Forums / Sitefinity Older Versions (3.x): Set-up & Installation > Moving/Renaming files between different Sitefinity databases