TSQL – Consultar e alterar LogicalName de uma base de dados
/*CODIGO PARA CONSULTAR*/
USE master
GO
/* Identify Database File Names */
SELECT name AS [Logical Name], physical_name AS [DB File Path], type_desc AS [File Type], state_desc AS [State]
FROM sys.master_files
WHERE database_id = DB_ID(N’newDataBaseName’)
/*CODIGO PARA ALTERAR*/
/* Set Database as a Single User */
ALTER DATABASE newDataBaseName SET SINGLE_USER WITH ROLLBACK IMMEDIATE
/* Change Logical File Name */
ALTER DATABASE newDataBaseName MODIFY FILE (NAME=N’oldDataBaseName’, NEWNAME=N’newDataBaseName’)
GO
ALTER DATABASE newDataBaseName MODIFY FILE (NAME=N’oldDataBaseName_log’, NEWNAME=N’newDataBaseName_log’)
GO
ALTER DATABASE newDataBaseName SET MULTI_USER
GO
Estes códigos devem ser utilizados quando for necessário criar uma nova base a partir de uma já existente, como o caso acima, foi necessário criar a base newDataBaseName, e utilizamos um backup da base oldDataBaseName como base, então como criamos uma nova base e restauramos o backup de uma outra base devemos verificar a questão do logical name, que em geral o que fica é o nome da base restaurada e não da nova base
SQL SERVER – Aumentar tamanho do banco
USE master;
DECLARE @DB_NAME VARCHAR(MAX) = 'myDatabase' /*NOME DO BANCO*/
DECLARE @SIZE VARCHAR(MAX) = '4000' /*EM MB*/
/* SET DATABASE AS A SINGLE USER */
EXEC('ALTER DATABASE ' + @DB_NAME + ' SET SINGLE_USER WITH ROLLBACK IMMEDIATE')
/* SET NEW SIZE */
EXEC(' ALTER DATABASE ' + @DB_NAME + ' MODIFY FILE (NAME = '+@DB_NAME+', SIZE = '+@SIZE+'MB);')
/* SET DATABASE AS A MULTI USER */
EXEC ( 'ALTER DATABASE '+ @DB_NAME + ' SET MULTI_USER ')
TSQL – Restaurar base de dados através do código
Bom, estava precisando agilizar a minha vida por aqui dai surgiu o script abaixo, neste script o caminho do diretório dever ser informado no formato abreviado. Para conseguir o nome abreviado do diretório basta abrir o Command, ir até o diretório que contem a pasta desejada e utilizar o comando “dir /x” este comando irá retornar o nome do diretório abreviado:
06/03/2012 11:09 PROGRA~1 Program Files
06/03/2012 11:06 PROGRA~2 Program Files (x86)
DECLARE @PATH_BAK VARCHAR(8000)
DECLARE @PATH_DB VARCHAR(8000)
DECLARE @DB_NAME VARCHAR(8000)
SET @PATH_BAK = N'C:\TEMP\arquivo.bak'
SET @PATH_DB = N'C:\BancoDeDados\'
SET @DB_NAME = 'nomeDaBase'
DECLARE @LogicalName VARCHAR(8000)
DECLARE @LogicalName_log VARCHAR(8000)
DECLARE @PhysicalName VARCHAR(8000)
DECLARE @PhysicalName_log VARCHAR(8000)
DECLARE @TMP TABLE (
LogicalName NVARCHAR(128) , PhysicalName NVARCHAR(260) , [Type] CHAR(1) , FileGroupName NVARCHAR(128) , Size NUMERIC(20, 0) ,
MaxSize NUMERIC(20, 0) , FileID BIGINT , CreateLSN NUMERIC(25, 0) , DropLSN NUMERIC(25, 0) , UniqueID UNIQUEIDENTIFIER ,
ReadOnlyLSN NUMERIC(25, 0) , ReadWriteLSN NUMERIC(25, 0) , BackupSizeInBytes BIGINT , SourceBlockSize INT , FileGroupID INT ,
LogGroupGUID UNIQUEIDENTIFIER , DifferentialBaseLSN NUMERIC(25, 0) , DifferentialBaseGUID UNIQUEIDENTIFIER ,
IsReadOnl BIT , IsPresent BIT , TDEThumbprint VARBINARY(32)
)
INSERT INTO @TMP EXEC ( 'RESTORE FILELISTONLY FROM DISK = '''+@PATH_BAK+''' WITH FILE=1;' )
SET @LogicalName = ( SELECT LogicalName FROM ( SELECT ROW_NUMBER() OVER (ORDER BY LogicalName ASC) AS rownumber,LogicalName FROM @TMP ) AS LogicalName WHERE rownumber = 1 )
SET @LogicalName_log = ( SELECT LogicalName FROM ( SELECT ROW_NUMBER() OVER (ORDER BY LogicalName ASC) AS rownumber,LogicalName FROM @TMP ) AS LogicalName WHERE rownumber = 2 )
SET @PhysicalName = @PATH_DB + @LogicalName + '.mdf'
SET @PhysicalName_log = @PATH_DB + @LogicalName_log + '.ldf'
EXEC(' ALTER DATABASE '+@DB_NAME+' SET SINGLE_USER WITH ROLLBACK IMMEDIATE ')
EXEC('RESTORE DATABASE '+@DB_NAME+' FROM DISK = '''+@PATH_BAK+''' WITH REPLACE, MOVE '''+@LogicalName+''' TO '''+@PhysicalName+''', MOVE '''+@LogicalName_log+''' TO '''+@PhysicalName_log+''' ')
EXEC(' ALTER DATABASE '+@DB_NAME+' SET MULTI_USER ')
TSQL – IF com BEGIN/END
Hoje pela manhã descobri que no TSQL assim como no C# deve-se utilizar BEGIN/END para blocos de código que tenham mais de uma linha.
ASP.NET MVC 3 com FluentNHibernate + Ninject
Estou com um novo projeto, e acabei chegando nesta proposta de arquitetura… gostaria que opniassem…
GenericDAO == Base para as demais DAO´s
DaoFacade == Concentra todos objetos DAO´s para expor para a aplicação MVC, assim não preciso ficar dando using em cada DAO, muito menos ficar injetando as DAO´s
NHibernateHelper == Expõe as operações do NHibernate para o ActionFilter TransactionPerRequest, assim minha aplicação ASP.NET não precisa conhecer nada de NHibernate…
TransactionPerRequest == Ainda tenho duvidas se todas as operações precisam abrir uma Transaction, estou achando que estou fazendo uma redundancia dentro da GenericDAO, ainda estou debugando para confirmar (se alguem puder opniar deixa um comment), mas pelo menos está garantindo que a ISession seja Closed a cada final de Request, e também posso indicar as Actions que usam, também só injeto a DaoFacade na Action que vai utilizar…
GenericDAO
using System;
using System.Collections.Generic;
using NHibernate;
using NHibernate.Criterion;
using Portal.Domain.Infrastructure;
namespace Portal.Domain.Core
{
public abstract class GenericDAO<T, IdT> : IDao<T, IdT>
{
private Type persitentType = typeof(T);
protected ISession NHibernateSession
{
get { return NHibernateHelper.GetCurrentSession(); }
}
/// <summary>
/// Loads an instance of type TypeOfListItem from the DB based on its ID.
/// </summary>
public T GetById(IdT id)
{
T entity;
entity = (T)NHibernateSession.Load(persitentType, id);
return entity;
}
/// <summary>
/// Save a new Entity
/// </summary>
public T Save(T entity)
{
using (ITransaction transaction = NHibernateSession.BeginTransaction())
{
try
{
NHibernateSession.Save(entity);
transaction.Commit();
NHibernateSession.Flush();
}
catch (HibernateException ex)
{
transaction.Rollback();
throw ex;
}
}
return entity;
}
/// <summary>
/// Save an Entity that don't exists, or update an existing Entity
/// </summary>
public T SaveOrUpdate(T entity)
{
using (ITransaction transaction = NHibernateSession.BeginTransaction())
{
try
{
NHibernateSession.SaveOrUpdate(entity);
transaction.Commit();
NHibernateSession.Flush();
}
catch (HibernateException)
{
transaction.Rollback();
throw new HibernateException();
}
}
return entity;
}
/// <summary>
/// Update an existing Entity
/// </summary>
public T Update(T entity)
{
using (ITransaction transaction = NHibernateSession.BeginTransaction())
{
try
{
NHibernateSession.Update(entity);
transaction.Commit();
NHibernateSession.Flush();
}
catch (HibernateException)
{
transaction.Rollback();
throw new HibernateException();
}
}
return entity;
}
/// <summary>
/// Delete an existing Entity
/// </summary>
public void Delete(T entity)
{
using (ITransaction transaction = NHibernateSession.BeginTransaction())
{
try
{
NHibernateSession.Delete(entity);
transaction.Commit();
NHibernateSession.Flush();
}
catch (HibernateException)
{
transaction.Rollback();
throw new HibernateException();
}
}
}
/// <summary>
/// Delete an List of existing Entities
/// </summary>
public void DeleteAll(IList<T> itemsToDelete)
{
foreach (T item in itemsToDelete)
{
try
{
using (ITransaction transaction = NHibernateSession.BeginTransaction())
{
NHibernateSession.Delete(item);
transaction.Commit();
NHibernateSession.Flush();
}
}
catch (HibernateException)
{
NHibernateSession.Transaction.Rollback();
}
}
}
}
}
NHibernateHelper
using NHibernate;
using NHibernate.Context;
using FluentNHibernate.Cfg;
using System.Reflection;
namespace Portal.Domain.Infrastructure
{
public class NHibernateHelper
{
private static ISessionFactory sessionFactory;
/// <summary>
/// SessionFactory is static because it is expensive to create and is therefore at application scope.
/// The property exists to provide 'instantiate on first use' behaviour.
/// </summary>
private static ISessionFactory SessionFactory
{
get
{
if (sessionFactory == null)
{
var cfg = new NHibernate.Cfg.Configuration();
cfg.Configure();
sessionFactory = Fluently.Configure(cfg)
.Mappings(x => x.FluentMappings.AddFromAssembly(Assembly.GetExecutingAssembly()))
.BuildSessionFactory();
}
return sessionFactory;
}
}
public static ISession GetCurrentSession()
{
if (!CurrentSessionContext.HasBind(SessionFactory))
{
CurrentSessionContext.Bind(SessionFactory.OpenSession());
}
return SessionFactory.GetCurrentSession();
}
public static void DisposeSession()
{
var session = GetCurrentSession();
session.Close();
session.Dispose();
}
public static void BeginTransaction()
{
GetCurrentSession().BeginTransaction();
}
public static void CommitTransaction()
{
var session = GetCurrentSession();
if (session.Transaction.IsActive)
{
session.Transaction.Commit();
}
}
public static void RollbackTransaction()
{
var session = GetCurrentSession();
if (session.Transaction.IsActive)
{
session.Transaction.Rollback();
}
}
}
}
DaoFacede
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Portal.Domain.Core;
using Portal.Domain.DAO;
namespace Portal.Domain.Infrastructure
{
public class DaoFacede
{
private CategoriaDAO categoriaDAO;
public CategoriaDAO CategoriaDAO
{
get
{
if (categoriaDAO == null)
{
categoriaDAO = new CategoriaDAO();
}
return categoriaDAO;
}
}
}
}
NinjectMVC3
[assembly: WebActivator.PreApplicationStartMethod(typeof(Portal.Site.App_Start.NinjectMVC3), "Start")]
[assembly: WebActivator.ApplicationShutdownMethodAttribute(typeof(Portal.Site.App_Start.NinjectMVC3), "Stop")]
namespace Portal.Site.App_Start
{
using System.Reflection;
using Microsoft.Web.Infrastructure.DynamicModuleHelper;
using Ninject;
using Ninject.Web.Mvc;
using Portal.Domain.Infrastructure;
public static class NinjectMVC3
{
private static readonly Bootstrapper bootstrapper = new Bootstrapper();
/// <summary>
/// Starts the application
/// </summary>
public static void Start()
{
DynamicModuleUtility.RegisterModule(typeof(OnePerRequestModule));
DynamicModuleUtility.RegisterModule(typeof(HttpApplicationInitializationModule));
bootstrapper.Initialize(CreateKernel);
}
/// <summary>
/// Stops the application.
/// </summary>
public static void Stop()
{
bootstrapper.ShutDown();
}
/// <summary>
/// Creates the kernel that will manage your application.
/// </summary>
/// <returns>The created kernel.</returns>
private static IKernel CreateKernel()
{
var kernel = new StandardKernel();
RegisterServices(kernel);
return kernel;
}
/// <summary>
/// Load your modules or register your services here!
/// </summary>
/// <param name="kernel">The kernel.</param>
private static void RegisterServices(IKernel kernel)
{
kernel.Bind<DaoFacede>().ToSelf();
}
}
}
TransactionPerRequest
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Portal.Domain.Infrastructure;
namespace Portal.Site
{
/// <summary>
/// Use this filter for actions that need to persist state.
/// </summary>
public class TransactionPerRequest : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
NHibernateHelper.BeginTransaction();
}
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
// use this method instead of OnResultExecuted if the transaction / session
// does not need be open for the view rendering.
}
public override void OnResultExecuted(ResultExecutedContext filterContext)
{
if (filterContext.Exception == null)
{
NHibernateHelper.CommitTransaction();
}
NHibernateHelper.DisposeSession();
}
}
}
HomeController
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Portal.Domain.Infrastructure;
using Portal.Domain;
namespace Portal.Site.Controllers
{
public class HomeController : Controller
{
public HomeController()
{
}
[TransactionPerRequest]
public ActionResult Index(DaoFacede daoFacede)
{
Categoria objAtual = daoFacede.CategoriaDAO.GetById(1);
if (objAtual != null)
{
ViewBag.Teste = objAtual.NomeController;
}
return View();
}
}
}
.Net Architects Days 2011
O .Net Architects Days é uma conferência nacional sem fins lucrativos focada em arquitetura de software na plataforma .NET. O objetivo do evento é trazer para o mercado uma visão avançada sobre desenvolvimento de software utilizando padrões, práticas, técnicas e ferramentas que permitem o desenvolvimento sustentável de um aplicativo. Contaremos com assuntos técnicos, conceituais, práticos e acadêmicos.
O evento acontecerá em São Paulo em 3 e 4 de junho (sexta e sábado), o dia inteiro. Os palestrantes são figuras conhecidas do .NET Architects, do mercado e da comunidade em geral, contando com arquitetos, MVPs e desenvolvedores com experiência prática de mercado.
Para maiores informações acesse:
Home: http://bit.ly/dnad2011
Inscrições: http://bit.ly/EuVouNoDNAD
Patrocinadores: http://bit.ly/dnad11patrocinio
Palestrantes: http://bit.ly/dnad11palestrantes
Programação: http://bit.ly/dnad11prog
Twitter: @netarchitects (#dnad11)
LINQ – Apagar registros em cascata em uma tabela com auto-relacionamento
Hoje tive um novo “desafio” estava fazendo um sistema onde existia uma tabela com um auto-relacionamento. E a necessidade de quando excluir um registro, eu deveria excluir todos os filhos deste registro.
Para solucionar este problema acabei apelando para a recursividade, a solução abaixo funcionou para mim.
Caso alguem já tenha enfrentado este mesmo desafio e tenha uma solução melhor ou mais elegante, se possível me deixa ela em um comentário aqui.
if (objToDelete.Entitys.Count > 0)
{
DeleteChildren(objToDelete.Entitys);
}
_dataContext.Entitys.DeleteOnSubmit(objToDelete);
_dataContext.SubmitChanges();
private void DeleteChildren(EntitySet
{
for (int i = (list.Count-1); i >= 0; i--)
{
Entity item = list[i];
if (item.Entitys.Count > 0)
{
DeleteChildren(item.Entitys);
_dataContext.Entitys.DeleteOnSubmit(item);
_dataContext.SubmitChanges();
}
else
{
_dataContext.Entitys.DeleteOnSubmit(item);
_dataContext.SubmitChanges();
}
}
}
ASP.NET (C#) – Aplicação perde a Session depois de utilizar o Directory.Move
Hoje durante o desenvolvimento de uma aplicação, tive a infelicidade de descobrir que não é possível utilizar variáveis de sessão quando se utiliza o Directory.Move.
Isto acontece quando a pasta a ser movida está dentro da mesma pasta da aplicação ASP.NET, ao mover a pasta ou renomear, a estrutura da aplicação é alterada, e com isto a mesma é recompilada e ai que nasce o problema, a Session é re-iniciada.
Até agora a única solução que eu achei, foi mover a pasta base que irá conter as novas pastas e arquivos para uma pasta fora da aplicação ASP.NET, com isto não há alteração na estrutura de pastas e não há recompilação.
O único problema é que tive de criar uma página proxy para fazer o download dos arquivos.
ASP.NET AjaxToolkit AutoComplete com Titulo e Código
Hoje eu estava apanhando para fazer, acabei achando este post muito útil…
Só fiz uma modificação para usar LINQ depois eu posto…
http://lazyloading.blogspot.com/2008/05/aspnet-ajax-toolkit-getting-key-value.html
Link Trading Area
Link Market – Free Link Exchange, Link Building and Link Trade Directory
Have you ever tried to exchange links, link building, or trade links? Was it hard? Use link market instead; – it is easy to use, free and very smart. It will save you hours of work.
Wallpaper
Free wallpapers for computer desktops. Categories: abstract, aircraft, animals, cars, cartoons, celebrities, computers, flowers, funny, games, movies, nature, places, science fiction, sports.
Pilipinas
A premier website with all informations you need to know about philippines or pilipinas. Know and learn on philippines travel, vacations, hotels, flights, news, guides, informations, real estate, houses, ads, schools and more!
Moving to Microsoft Visual Studio 2010 ebook
Para aqueles que ainda não começaram a utilizar o VS2010 acabei de achar um link interessante. A Microsoft está disponibilizando um eBook de graça que é o Moving to Microsoft Visual Studio 2010.
Para maiores informações acesse o link: http://download.microsoft.com/download/9/0/B/90B96800-6765-4AC2-A79F-A2E9116F2157/Moving%20to%20Microsoft%20Visual%20Studio%202010%20ebook.pdf
Inscrições abertas para curso de Pós Graduação Lato Sensu em Computação – Desen. de Software para Web
Novo Período de Inscrições para o Curso de Pós Graduação Lato Sensu em Computação – Desenvolvimento de Software para Web será aberto para o preeenchimento das vagas remanescentes. Esse novo período de inscrições permitirá que novas inscrições sejam feitas até o dia 17/janeiro/2010.
Para maiores informações e inscrição acesse: aqui
Como tornar seu site acessível?
Outro artigo do site tableless… muito interessante…
Confira este artigo na integra no sitetableless
Usabilidade para desenvolvedores front-end
Artigo publicado no site Tableless vale a pena ler…
A usabilidade é uma qualidade das interfaces que caracteriza a facilidade de uso. Várias diretrizes sobre usabilidade de interfaces web foram desenvolvidas ao longo dos últimos 15 anos e o interesse em proporcionar interfaces de fácil utilização tem crescido entre designers e desenvolvedores.
Confira na integra em http://www.tableless.com.br/usabilidade-para-desenvolvedores-front-end
