quarta-feira, 20 de junho de 2012

T-SQL: Gerar queries dinamicamente em todos objectos de uma base de dados

-- O objectivo desta query é gerar queries no message output do SQL Management Studio sem usar CURSORs
-- Depois basta executar, copiar e validar o resultado
-- Pegar no SQL gerado e executar.

USE nome_da_base_de_dados

DECLARE @ID    integer
DECLARE @LAST_ID integer
declare @name nvarchar(255)

SET @LAST_ID = 0

WHILE @LAST_ID IS NOT NULL
BEGIN

   --alterar esta query para devolver o tipo de objectos pretendido
   --mais info sobre types e outras informações do sysobjects em:
   -- http://msdn.microsoft.com/en-us/library/ms190324.aspx
    SELECT @ID = MIN(id)
    FROM dbo.sysobjects
    WHERE id > @LAST_ID  AND type = 'P' AND category = 0
   
    SELECT @name = name
        FROM dbo.sysobjects
        WHERE id = @ID
   
    --alterar este print com o tipo de permissões ou outra ação sobre o objecto da base de dados
    print 'GRANT EXECUTE ON [' + @name + '] TO usp_myStoreProcedure'
    SET @LAST_ID = @ID
END

segunda-feira, 4 de junho de 2012

Microsoft Visual Studio 2012: Remover maiúsculas do menu de topo

O menu de topo do Visual Studio 2012 tem as letras todas em maiúsculas.


Para desactivar esta característica  e ficar com o menu em minúsculas é necessário adicionar uma chave no registry.
Para tal, basta adicionar a chave com o nome SuppressUppercaseConversion do tipo REG_DWORD com o valor 1 na localização indicada a seguir, consoante a versão.

Para a versão Microsoft Visual Studio 2012 RC criar a chave em:  HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\11.0\General

Para a versão Microsoft Visual Studio Express 2012 RC for Web criar a chave em:  HKEY_CURRENT_USER\Software\Microsoft\VWDExpress\11.0\General

Após a criação da chave é necessário reiniciar o Visual Studio 2012  e o menu aparecerá da seguinte forma.



Fonte: Richard Banks





quinta-feira, 24 de maio de 2012

Visual Studio 2010 lança vários web servers (cassini)

Estava a fazer debug (attach) a um processo especifico w3wp.exe e o VS2010 arrancava diversos webdevelopment servers (cassini).
É bastante fácil desligar/ligar esta opção, basta ir a cada host e ligar ou desligar a opção "Always Start When Debugging". Para mim isto é chato mas pode ser útil para quem queira lançar automaticamente vários web servers com portos fixos clicando apenas no Play (Start Debugging).


quarta-feira, 18 de abril de 2012

SQL Server 2008 - Terminar processos que estão a usar uma BD

Eu estava habituado a usar o Activity Monitor no SQL Management Studio 2005 mas na versão 2008 está ligeiramente diferente e na minha opinião "demasiado escondido".

Basta clicar com o botão direito na instância SQL e selecionar "Activity Monitor" a partir daqui é possivel ver alguns gráficos com a performance, processos que estão a usar quais BDs e termina-los, entre outras informações de performance.

terça-feira, 3 de abril de 2012

Recuperar acesso a uma instância SQL Server.

Para recuperar acesso a um SQL Server (por exemplo após mudar o nome da máquina), abrir o SQL Server Configuration Manager (All Programs > Microsoft SQL Server 2008 R2 > Configuration Tools).

Seleccionar o nó SQL Server Services > SQL Server (MSSQLSERVER) e abrir as propriedades.

Na tab Advanced adicionar ao Startup Parameters o sufixo ";-m" para correr em single user mode. Aí já é possível aceder à instância usando o SQL Server Management Studio e adicionar os users necessários para recuperar a instalação.

Mais detalhes no post original:
http://blogs.msdn.com/b/raulga/archive/2007/07/12/disaster-recovery-what-to-do-when-the-sa-account-password-is-lost-in-sql-server-2005.aspx

sexta-feira, 9 de março de 2012

T-SQL tranformar os dados pedidos na query select para um tipo diferente

Ao construir uma query sql precisava de analisar um inteiro e devolver uma string (ou booleano ou outra coisa qualquer) e o melhor que encontrei que funcionasse tipo "IF" para Selects foi o CASE:

SELECT Id, Price, Name,
     (CASE WHEN Stock > 0 THEN 'Em stock' ELSE 'Sem Stock' END)
 FROM Produtos
where  Category = 'Consolas'

segunda-feira, 9 de janeiro de 2012

C#: Invocar um construtor (com parâmetros) a partir de um metodo genérico .Net

Exemplo para construir uma instância de uma classe a partir de um método genérico, isto pode ser útil para usar um design pattern tipo Factory.

/* O objectivo deste método é invocar o construtor de qualquer classe que seja MyClass1 ou que herde desta e que não tenha o construtor sem parâmetros porque, para isso, bastaria usar além do where a keyword new, ex:  where T : ... new()  */

public T myGenericMethod(string p1, int p2) where T : MyClass1

     System.Reflection.ConstructorInfo constructorInfo =
            typeof(T).GetConstructor(new Type[] { typeof(string), typeof(int) });
 
    T myObject =
          (T)constructorInfo.Invoke(new object[] { p1, p2});

    return myObject;
}

Definindo esta função genérica posso instanciar qualquer classe derivada de  myClass1 que tenha um construtor com uma string e um inteiro como parâmetros. Por exemplo, supondo que existe uma classe chamada MyClass2 que herde de MyClass1:

/* exemplo de classe */
public class MyClass2 : MyClass1 { ... }

/* exemplo como usar o método */
MyClass2 exemplo =
        myGenericMethod("teste", 123);

Claro que isto não tem grandes vantagens assim à primeira vista, mas podemos centralizar operações criando o conceito de Factory.

quinta-feira, 5 de janeiro de 2012

Coded UI teclas especiais

No âmbito dos Coded UI (testes automáticos no Visual Studio 2010) ou de outras aplicações interactivas em que temos que simular comportamentos como se fossem o utilizador a escrever podemos usar a classe Keyboard:

Esta classe encontra-se no namespace: Microsoft.VisualStudio.TestTools.UITesting

Em conjunto com estas tabelas de referência:
http://msdn.microsoft.com/en-us/library/fx2k26ca%28v=vs.90%29.aspx
http://msdn.microsoft.com/en-us/library/dd433886.aspx
é possivel enviar comandos como se estivessemos a escrever no teclado, exemplos:

Keyboard.SendKeys("{DOWN}", ModifierKeys.Alt);
Keyboard.SendKeys("{RIGHT}");
Keyboard.SendKeys("{ENTER}");

Também é possivel definir o nº de repetições:
Keyboard.SendKeys("{LEFT 5}");
isto é o equivalente a pressionar a tecla para a esquerda 5 vezes.

Atualização:
Na assembly System.Windows.Forms.dll estão disponível os  métodos equivalentes ao anterior:
Exemplo:
System.Windows.Forms.SendKeys.SendWait("{b 10}");

Nota: esta última pode ser apenas dedicada aos WindowsForms...

#region Assembly Microsoft.VisualStudio.TestTools.UITesting.dll, v4.0.30319
// c:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\PublicAssemblies\Microsoft.VisualStudio.TestTools.UITesting.dll
#endregion

segunda-feira, 2 de janeiro de 2012

.NET: Parsing e manipulação da QueryString

Em .NET existe o método HttpUtility.ParseQueryString quer permite efetuar o parsing da querystring devolvendo um objecto do tipo NameValueCollection
O objecto, do tipo NameValueCollection, permite fazer a manipulação da querystring suportando as seguintes operações:
  • adicionar, remover propriedades
  • consultar e modificar o valor das propriedades.

Exemplo:

NameValueCollection queryString = HttpUtility.ParseQueryString("?displaycode=deseja&feliz=2011");


// Obter o valor da propriedade
string ano = queryString["feliz"];

// Alterar o valor da propriedade
queryString["feliz"] = "2012";


// Remover a propriedade
queryString.Remove("feliz");

// Adicionar a propriedade
queryString.Add("feliz", "2012");

// Resultado: displaycode=deseja&feliz=2012
string resultado = queryString.ToString();