コード例 #1
0
        /// <summary>
        ///
        /// </summary>
        public void Update()
        {
            using (var connection = new DatabaseConnectionProvider().GetConnection(_context.SqlConnectionString))
            {
                connection.Open();

                var exproc = connection.ExecuteScalar <int>("select object_id('" + _context.MetadataTable + "Register')");
                if (0 == exproc)
                {
                    throw new Exception("В целевой БД отсутвует процедура " + _context.MetadataTable + "Register");
                }
                //сначала надо прорегистрировать скрипт, и только потом его выполнять, так как на него могут идти ссылки
                var register = "exec " + _context.MetadataTable +
                               "Register @code=@code,@name=@code,@content=@content, @hash=@hash,@revision=@revision,@filetime=@filetime,@comment=@comment";

                connection.ExecuteNonQuery(register, new { code = _context.ProjectName + ".project", comment = _context.FullUpdate || !_context.GitBaseRevision.ToBool()?"full":"diff", content = string.Join("\r\nGO\r\n", _context.SqlScripts), filetime = DateTime.Now, hash = _context.ResolvedUpdateRevision, revision = _context.ResolvedUpdateRevision.Substring(0, 7) });
                if (_context.OnlyRegister)
                {
                    _context.Log.Trace("Включен режим 'только регистрация', сам скрипт обновления не выполняется");
                }
                else
                {
                    foreach (var script in _context.SqlScripts)
                    {
                        _context.Log.Trace("Begin ExecuteSql : '" + script.Substring(0, Math.Min(100, script.Length)) + "' at " + DateTime.Now.ToString());
                        connection.ExecuteNonQuery(script, timeout: 30000);
                        _context.Log.Trace("End ExecuteSql : '" + script.Substring(0, Math.Min(100, script.Length)) + "' at " + DateTime.Now.ToString());
                    }
                }
            }
        }
コード例 #2
0
 /// <summary>
 ///
 /// </summary>
 public void Determine()
 {
     using (var connection = new DatabaseConnectionProvider().GetConnection(_context.SqlConnectionString)){
         connection.Open();
         var exproc = connection.ExecuteScalar <int>("select object_id('" + _context.MetadataTable + "')");
         if (0 == exproc)
         {
             throw new Exception("В целевой БД отсутвует таблица " + _context.MetadataTable);
         }
         var currev =
             connection.ExecuteScalar <string>("select ActiveRevisionRevision from " + _context.MetadataTable +
                                               "Full where Code='" + _context.ProjectName + ".project'");
         _context.GitBaseRevision = currev;
     }
 }