Precisei fazer um UPDATE em massa a partir de uma planilha excel.
Cheguei a solução do BULK INSERT com UPDATE
Segue a Implementação:
private string IncluirSkuRecomendadoNoBanco(List<SkuRecomendadoImportacaoBE> recomendacoes)
{
var retorno = "sucesso";
var totalLinhasAtualizadas = 0;
//Cria arquivo de log
StreamWriter writer = new StreamWriter("C:\\Users\\marcelo.braga\\Desktop\\log.txt");
writer.WriteLine("IdSku;SkusRecomendados");
//Converte List em DataTable
var dt = new System.Data.DataTable();
dt.Columns.Add("IdSkuPai");
dt.Columns.Add("SkusRecomendados");
foreach (var item in recomendacoes)
{
writer.WriteLine(item.IdSkuPai + ";" + item.SkusRecomendados);
System.Data.DataRow dr = dt.NewRow();
dr["IdSkuPai"] = item.IdSkuPai;
dr["SkusRecomendados"] = item.SkusRecomendados;
dt.Rows.Add(dr);
dr.AcceptChanges();
}
var conn = new SqlConnection(GetConnection());
try
{
conn.Open();
//Bulk insert into temp table
using (SqlBulkCopy bulkcopy = new SqlBulkCopy(conn))
{
bulkcopy.BulkCopyTimeout = 660;
bulkcopy.DestinationTableName = "TmpTable";
bulkcopy.WriteToServer(dt);
bulkcopy.Close();
}
//Update
var queryUpadate = "UPDATE S SET S.SKUSRECOMENDADOS = Temp.SkusRecomendados FROM SKU S INNER JOIN TmpTable Temp ON S.IDSKU = Temp.IdSkuPai;";
using (var cmd = new SqlCommand(queryUpadate, conn))
{
cmd.CommandTimeout = int.MaxValue;
totalLinhasAtualizadas = cmd.ExecuteNonQuery();
writer.WriteLine("Total de registros atualizados: " + totalLinhasAtualizadas);
}
}
catch (Exception ex)
{
writer.WriteLine("Erro: " + ex.Message);
writer.Close();
}
finally
{
conn.Close();
}
return retorno;
}
Não esqueça de criar a tabela no banco:
CREATE TABLE TmpTable(IdSkuPai INT,SkusRecomendados VARCHAR(MAX));
Fonte: http://stackoverflow.com/questions/20635796/bulk-update-in-c-sharp
Muito Obrigado e até o próximo post!
quinta-feira, 27 de novembro de 2014
terça-feira, 25 de novembro de 2014
Como criar um Crawler, Robo para nagevar pelo browser via programacao
Como criar um Crawler, Robô para navegar pelo browser via programação
Muito fácil!
Primeiro de tudo é preciso adicionar o Selenium WebDriver.
Fica mais fácil através da linha de comando do Nuget:
PM> Install-Package Selenium.WebDriver
Para mais detalhes de como instalar acesse:
http://www.nuget.org/packages/selenium.webdriver
Segue um exemplo simples de como implementar o robô com Selenium:
private static void ReturnUrl(string url, List<string> listaUrls)
{
IWebDriver driver = new FirefoxDriver();
driver.Navigate().GoToUrl(url);
var query = driver.FindElements(By.XPath("//a[contains(@href,'nike.com.br')]"));
var urlExcecao = ConfigurationManager.AppSettings["UrlExcecao"];
var listaUrlsExcecao = urlExcecao.Split(',').ToList<string>();
foreach (var item in query)
listaUrls.Add(item.GetAttribute("href"));
var urlsRemovidas = 0;
foreach (var item in listaUrls.Distinct())
{
driver.Quit();
foreach (string itemExcecao in listaUrlsExcecao)
{
urlsRemovidas += listaUrls.Distinct().ToList().RemoveAll(str => str.Contains(item));
}
if (!listaFinal.Equals(item))
{
listaFinal.Add(item);
Console.Write(item + "\n");
ReturnUrl(item, listaUrls.Except(listaFinal).ToList());
}
}
Console.Read();
}
Muito Obrigado e até o próximo post!
Muito fácil!
Primeiro de tudo é preciso adicionar o Selenium WebDriver.
Fica mais fácil através da linha de comando do Nuget:
PM> Install-Package Selenium.WebDriver
Para mais detalhes de como instalar acesse:
http://www.nuget.org/packages/selenium.webdriver
Segue um exemplo simples de como implementar o robô com Selenium:
private static void ReturnUrl(string url, List<string> listaUrls)
{
IWebDriver driver = new FirefoxDriver();
driver.Navigate().GoToUrl(url);
var query = driver.FindElements(By.XPath("//a[contains(@href,'nike.com.br')]"));
var urlExcecao = ConfigurationManager.AppSettings["UrlExcecao"];
var listaUrlsExcecao = urlExcecao.Split(',').ToList<string>();
foreach (var item in query)
listaUrls.Add(item.GetAttribute("href"));
var urlsRemovidas = 0;
foreach (var item in listaUrls.Distinct())
{
driver.Quit();
foreach (string itemExcecao in listaUrlsExcecao)
{
urlsRemovidas += listaUrls.Distinct().ToList().RemoveAll(str => str.Contains(item));
}
if (!listaFinal.Equals(item))
{
listaFinal.Add(item);
Console.Write(item + "\n");
ReturnUrl(item, listaUrls.Except(listaFinal).ToList());
}
}
Console.Read();
}
Muito Obrigado e até o próximo post!
Como fazer para concatenar mais de um campo no PIVOT
Depois de trabalhar com PIVOT, me deparei com outro problema: concatenar mais de um campo dentro do PIVOT.
No forum abaixo tem a pergunta e algumas soluções propostas:
http://stackoverflow.com/questions/27108762/pivot-sql-server-multiple-values-in-aggregate-function
Minha solução ficou da seguinte forma:
select * FROM
(select s.IdSKU, ca.Campo, [Valor] = Case when ca.Campo = 'cor' then REPLACE((Select distinct Valor AS [data()] from Colecao (NOLOCK) cl
INNER JOIN ColecaoParametro (NOLOCK)cp ON cp.IdColecao = cl.IdColecao
INNER JOIN ColecaoParametroProduto (NOLOCK) cpp ON cp.idcolecaoparametro = cpp.idcolecaoparametro
INNER JOIN produto (NOLOCK) p ON cpp.IdProduto = p.IdProduto
INNER JOIN categoria(NOLOCK) c ON c.idCategoria = p.idCategoria
INNER JOIN dbo.CategoriaFiltro (NOLOCK) cf0 ON cf0.IdCategoria=c.IdCategoria
INNER JOIN Sku (NOLOCK) s ON s.idProduto = p.idProduto
INNER JOIN SkuValorCampo (NOLOCK) svc ON svc.idSku = s.IdSKU
INNER JOIN ValorCampo (NOLOCK) vc ON vc.IdValorCampo = svc.idValorCampo
INNER JOIN Valor (NOLOCK) v ON v.IdValor = vc.IdValor
INNER JOIN Campo (NOLOCK) ca ON ca.IdCampo = vc.IdCampo
where s.IdSKU = 309613 and ca.Campo = 'cor' FOR xml path('')),' ',',') else v.Valor end
FROM Colecao (NOLOCK) cli
INNER JOIN ColecaoParametro (NOLOCK)cp ON cp.IdColecao = cli.IdColecao
INNER JOIN ColecaoParametroProduto (NOLOCK) cpp ON cp.idcolecaoparametro = cpp.idcolecaoparametro
INNER JOIN produto (NOLOCK) p ON cpp.IdProduto = p.IdProduto
INNER JOIN categoria(NOLOCK) c ON c.idCategoria = p.idCategoria
INNER JOIN dbo.CategoriaFiltro (NOLOCK) cf0 ON cf0.IdCategoria=c.IdCategoria
INNER JOIN Sku (NOLOCK) s ON s.idProduto = p.idProduto
INNER JOIN SkuValorCampo (NOLOCK) svc ON svc.idSku = s.IdSKU
INNER JOIN ValorCampo (NOLOCK) vc ON vc.IdValorCampo = svc.idValorCampo
INNER JOIN Valor (NOLOCK) v ON v.IdValor = vc.IdValor
INNER JOIN Campo (NOLOCK) ca ON ca.IdCampo = vc.IdCampo
where s.IdSKU = 309613
UNION
select s.IdSKU, ca.Campo, v.Valor
FROM Colecao (NOLOCK) cl
INNER JOIN ColecaoParametro (NOLOCK)cp ON cp.IdColecao = cl.IdColecao
INNER JOIN ColecaoParametroProduto (NOLOCK) cpp ON cp.idcolecaoparametro = cpp.idcolecaoparametro
INNER JOIN produto (NOLOCK) p ON cpp.IdProduto = p.IdProduto
INNER JOIN categoria(NOLOCK) c ON c.idCategoria = p.idCategoria
INNER JOIN dbo.CategoriaFiltro (NOLOCK) cf0 ON cf0.IdCategoria=c.IdCategoria
INNER JOIN Sku (NOLOCK) s ON s.idProduto = p.idProduto
INNER JOIN ProdutoValorCampo (NOLOCK) pvc ON pvc.idProduto = p.IdProduto
INNER JOIN ValorCampo (NOLOCK) vc ON vc.IdValorCampo = pvc.idValorCampo
INNER JOIN Valor (NOLOCK) v ON v.IdValor = vc.IdValor
INNER JOIN Campo (NOLOCK) ca ON ca.IdCampo = vc.IdCampo
where s.IdSKU = 309613) AS t
PIVOT
(MAX(Valor)
FOR Campo IN (Tamanho,Cor,Gênero)) tt
Muito Obrigado e até o próximo post!
No forum abaixo tem a pergunta e algumas soluções propostas:
http://stackoverflow.com/questions/27108762/pivot-sql-server-multiple-values-in-aggregate-function
Minha solução ficou da seguinte forma:
select * FROM
(select s.IdSKU, ca.Campo, [Valor] = Case when ca.Campo = 'cor' then REPLACE((Select distinct Valor AS [data()] from Colecao (NOLOCK) cl
INNER JOIN ColecaoParametro (NOLOCK)cp ON cp.IdColecao = cl.IdColecao
INNER JOIN ColecaoParametroProduto (NOLOCK) cpp ON cp.idcolecaoparametro = cpp.idcolecaoparametro
INNER JOIN produto (NOLOCK) p ON cpp.IdProduto = p.IdProduto
INNER JOIN categoria(NOLOCK) c ON c.idCategoria = p.idCategoria
INNER JOIN dbo.CategoriaFiltro (NOLOCK) cf0 ON cf0.IdCategoria=c.IdCategoria
INNER JOIN Sku (NOLOCK) s ON s.idProduto = p.idProduto
INNER JOIN SkuValorCampo (NOLOCK) svc ON svc.idSku = s.IdSKU
INNER JOIN ValorCampo (NOLOCK) vc ON vc.IdValorCampo = svc.idValorCampo
INNER JOIN Valor (NOLOCK) v ON v.IdValor = vc.IdValor
INNER JOIN Campo (NOLOCK) ca ON ca.IdCampo = vc.IdCampo
where s.IdSKU = 309613 and ca.Campo = 'cor' FOR xml path('')),' ',',') else v.Valor end
FROM Colecao (NOLOCK) cli
INNER JOIN ColecaoParametro (NOLOCK)cp ON cp.IdColecao = cli.IdColecao
INNER JOIN ColecaoParametroProduto (NOLOCK) cpp ON cp.idcolecaoparametro = cpp.idcolecaoparametro
INNER JOIN produto (NOLOCK) p ON cpp.IdProduto = p.IdProduto
INNER JOIN categoria(NOLOCK) c ON c.idCategoria = p.idCategoria
INNER JOIN dbo.CategoriaFiltro (NOLOCK) cf0 ON cf0.IdCategoria=c.IdCategoria
INNER JOIN Sku (NOLOCK) s ON s.idProduto = p.idProduto
INNER JOIN SkuValorCampo (NOLOCK) svc ON svc.idSku = s.IdSKU
INNER JOIN ValorCampo (NOLOCK) vc ON vc.IdValorCampo = svc.idValorCampo
INNER JOIN Valor (NOLOCK) v ON v.IdValor = vc.IdValor
INNER JOIN Campo (NOLOCK) ca ON ca.IdCampo = vc.IdCampo
where s.IdSKU = 309613
UNION
select s.IdSKU, ca.Campo, v.Valor
FROM Colecao (NOLOCK) cl
INNER JOIN ColecaoParametro (NOLOCK)cp ON cp.IdColecao = cl.IdColecao
INNER JOIN ColecaoParametroProduto (NOLOCK) cpp ON cp.idcolecaoparametro = cpp.idcolecaoparametro
INNER JOIN produto (NOLOCK) p ON cpp.IdProduto = p.IdProduto
INNER JOIN categoria(NOLOCK) c ON c.idCategoria = p.idCategoria
INNER JOIN dbo.CategoriaFiltro (NOLOCK) cf0 ON cf0.IdCategoria=c.IdCategoria
INNER JOIN Sku (NOLOCK) s ON s.idProduto = p.idProduto
INNER JOIN ProdutoValorCampo (NOLOCK) pvc ON pvc.idProduto = p.IdProduto
INNER JOIN ValorCampo (NOLOCK) vc ON vc.IdValorCampo = pvc.idValorCampo
INNER JOIN Valor (NOLOCK) v ON v.IdValor = vc.IdValor
INNER JOIN Campo (NOLOCK) ca ON ca.IdCampo = vc.IdCampo
where s.IdSKU = 309613) AS t
PIVOT
(MAX(Valor)
FOR Campo IN (Tamanho,Cor,Gênero)) tt
Muito Obrigado e até o próximo post!
sexta-feira, 21 de novembro de 2014
sexta-feira, 24 de outubro de 2014
Como transformar o número do mês em string
Muito fácil!
var mes = CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(DateTime.Today.Month);
Pronto! Muito Obrigado e até o próximo POST!
var mes = CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(DateTime.Today.Month);
Pronto! Muito Obrigado e até o próximo POST!
sexta-feira, 19 de setembro de 2014
A página solicitada não pode ser acessada porque os dados de configuração relacionados à página são inválidos.
Erro HTTP 500.19 - Internal Server Error
A página solicitada não pode ser acessada porque os dados de configuração relacionados à página são inválidos.
Depois de passar dois dias pesquisando sobre o assunto cheguei a uma solução:
1 - Abra o IIS e verifique o pool de aplicativos que sua aplicação está apontando.
2 - Depois na coluna Identidade verifique qual usuário está com permissão. Provavelmente você verá ApplicationPoolIdentity.
3 - Clique do lado direito na opção "Configurações Avançadas".
4 - Procure por Identidade e troque para seu usuário de máquina:
5 - Em seguida verifique se a pasta onde o IIS aponta os arquivos está com autorização para o mesmo usuário.
Pronto! Muito Obrigado e até o próximo POST!
terça-feira, 2 de setembro de 2014
Como fazer para trabalhar com jQuery Templates
Como fazer para trabalhar com jQuery Templates
Vamos começar a trabalhar com jQuery Templates. Basicamente serve para disponibilizar e principalmente manipular os dados no browser.
Por exemplo, você pode usar o jQuery Templates para formatar e exibir os dados vindo de uma chamada ajax.
jQuery Templates suporta um número poderoso de funcionalidades como templates tags, template composition, e wrapped templates. Eu vou me concentrar nas funcionalidades que eu penso ser mais usual.
O jQuery Templates plugin foi desenvolvido pelo time da Microsoft ASP.NET com colaboração do time jQuery - código aberto.
Vamos colocar a mão na massa:
Vamos começar com um exemplo simples de como usar jQuery Template. Nós vamos usar o plugin para listar os livros armazenado em um array. Segue o código:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Intro</title>
<link href="0_Site.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="pageContent">
<h1>ASP.NET Bookstore</h1>
<div id="bookContainer"></div>
</div>
<script id="bookTemplate" type="text/x-jQuery-tmpl">
<div>
<img src="BookPictures/${picture}" alt="" />
<h2>${title}</h2>
price: ${formatPrice(price)}
</div>
</script>
<script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.4.4.js"></script>
<script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/jquery.templates/beta1/jquery.tmpl.js"></script>
<script type="text/javascript">
// Create an array of books
var books = [
{ title: "ASP.NET 4 Unleashed", price: 37.79, picture: "AspNet4Unleashed.jpg" },
{ title: "ASP.NET MVC Unleashed", price: 44.99, picture: "AspNetMvcUnleashed.jpg" },
{ title: "ASP.NET Kick Start", price: 4.00, picture: "AspNetKickStart.jpg" },
{ title: "ASP.NET MVC Unleashed iPhone", price: 44.99, picture: "AspNetMvcUnleashedIPhone.jpg" },
];
// Render the books using the template
$("#bookTemplate").tmpl(books).appendTo("#bookContainer");
function formatPrice(price) {
return "$" + price.toFixed(2);
}
</script>
</body>
</html>
Quando abrir a página do browser verá a seguinte página:
Primeira coisa a notar de diferente é o MIME type "text/x-jQuery-tmpl". Que foi atráves dele que fiquei sabendo que se tratava de um "jQuery Template". Segue:
<script id="bookTemplate" type="text/x-jQuery-tmpl">
<div>
<img src="BookPictures/${picture}" alt="" />
<h2>${title}</h2>
price: ${formatPrice(price)}
</div>
</script>
Esse template exibe para cada livro renderizado pelo template. O template mostra a "picture", "title" e "price".
Note também que a tag SCRIPT está decorada com um MIME type "text/x-jQuery-tmpl". Porque?
Quando o browser encontra uma MIME type desconhecido ele ignora essa tag. Esse é o comportamentp que você busca com usao de um template. Você não quer que o browser interprete pois pode causar efeitos colaterais.
E também não podemos deixar de notar a expressão ${...} que é usado pra exibir o valor da expressão JavaScript dentro do template. Por exemplo, a expressão ${title} é usado para mostrar o valor do título do livro. Você pode usar qualquer função Java Script dentro da expressão ${...}. Por exemplo, no exemplo abaixo, o preço do livro é formatado com ajuda de uma função JavaScript formatPrice(), que é definida na parte inferior da página.
E por fim vamos atentar para o método tmpl().Que basicamente renderiza o array java script no "bookTemplate". Segue:
$("#bookTemplate").tmpl(books).appendTo("#bookContainer");
Dentro do Template podemos usars as seguintes Tags:
{{tmpl}} - Usado para template composition
{{wrap}} - Usado para wrapped templates
{{each}} - usado para interar uma coleção
{{if}} - usado para condicionar o sitens do template
Vamos começar a trabalhar com jQuery Templates. Basicamente serve para disponibilizar e principalmente manipular os dados no browser.
Por exemplo, você pode usar o jQuery Templates para formatar e exibir os dados vindo de uma chamada ajax.
jQuery Templates suporta um número poderoso de funcionalidades como templates tags, template composition, e wrapped templates. Eu vou me concentrar nas funcionalidades que eu penso ser mais usual.
O jQuery Templates plugin foi desenvolvido pelo time da Microsoft ASP.NET com colaboração do time jQuery - código aberto.
Vamos colocar a mão na massa:
Vamos começar com um exemplo simples de como usar jQuery Template. Nós vamos usar o plugin para listar os livros armazenado em um array. Segue o código:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Intro</title>
<link href="0_Site.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="pageContent">
<h1>ASP.NET Bookstore</h1>
<div id="bookContainer"></div>
</div>
<script id="bookTemplate" type="text/x-jQuery-tmpl">
<div>
<img src="BookPictures/${picture}" alt="" />
<h2>${title}</h2>
price: ${formatPrice(price)}
</div>
</script>
<script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.4.4.js"></script>
<script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/jquery.templates/beta1/jquery.tmpl.js"></script>
<script type="text/javascript">
// Create an array of books
var books = [
{ title: "ASP.NET 4 Unleashed", price: 37.79, picture: "AspNet4Unleashed.jpg" },
{ title: "ASP.NET MVC Unleashed", price: 44.99, picture: "AspNetMvcUnleashed.jpg" },
{ title: "ASP.NET Kick Start", price: 4.00, picture: "AspNetKickStart.jpg" },
{ title: "ASP.NET MVC Unleashed iPhone", price: 44.99, picture: "AspNetMvcUnleashedIPhone.jpg" },
];
// Render the books using the template
$("#bookTemplate").tmpl(books).appendTo("#bookContainer");
function formatPrice(price) {
return "$" + price.toFixed(2);
}
</script>
</body>
</html>
Quando abrir a página do browser verá a seguinte página:
Primeira coisa a notar de diferente é o MIME type "text/x-jQuery-tmpl". Que foi atráves dele que fiquei sabendo que se tratava de um "jQuery Template". Segue:
<script id="bookTemplate" type="text/x-jQuery-tmpl">
<div>
<img src="BookPictures/${picture}" alt="" />
<h2>${title}</h2>
price: ${formatPrice(price)}
</div>
</script>
Esse template exibe para cada livro renderizado pelo template. O template mostra a "picture", "title" e "price".
Note também que a tag SCRIPT está decorada com um MIME type "text/x-jQuery-tmpl". Porque?
Quando o browser encontra uma MIME type desconhecido ele ignora essa tag. Esse é o comportamentp que você busca com usao de um template. Você não quer que o browser interprete pois pode causar efeitos colaterais.
E também não podemos deixar de notar a expressão ${...} que é usado pra exibir o valor da expressão JavaScript dentro do template. Por exemplo, a expressão ${title} é usado para mostrar o valor do título do livro. Você pode usar qualquer função Java Script dentro da expressão ${...}. Por exemplo, no exemplo abaixo, o preço do livro é formatado com ajuda de uma função JavaScript formatPrice(), que é definida na parte inferior da página.
E por fim vamos atentar para o método tmpl().Que basicamente renderiza o array java script no "bookTemplate". Segue:
$("#bookTemplate").tmpl(books).appendTo("#bookContainer");
Dentro do Template podemos usars as seguintes Tags:
{{tmpl}} - Usado para template composition
{{wrap}} - Usado para wrapped templates
{{each}} - usado para interar uma coleção
{{if}} - usado para condicionar o sitens do template
Como fazer para remover/apagar itens do HTML via JQuery
Como fazer para remover/apagar itens do HTML via JQuery
-Código HTML
<div class="campos">
<ol class="sortable ui-sortable">
<li id="campo-1" class="area no-nest mjs-nestedSortable-branch mjs-nestedSortable-collapsed">
</li>
<li id="campo-2" class="area no-nest mjs-nestedSortable-branch mjs-nestedSortable-collapsed">
</li>
</ol>
</div>
-JQuery
$(".campos").remove(".sortable ui-sortable").remove();
Remove e apaga da div com classe "campos" todas os elementos com a classe "sortable ui-sortable"
$("ol").remove(".sortable ui-sortable").remove();
Remove e apaga todas as "ol" com classe "sortable ui-sortable"
$("li").remove("area no-nest mjs-nestedSortable-branch mjs-nestedSortable-collapsed").remove();
Remove e apaga todas as "li" com classe "area no-nest mjs-nestedSortable-branch mjs-nestedSortable-collapsed"
-Código HTML
<div class="campos">
<ol class="sortable ui-sortable">
<li id="campo-1" class="area no-nest mjs-nestedSortable-branch mjs-nestedSortable-collapsed">
</li>
<li id="campo-2" class="area no-nest mjs-nestedSortable-branch mjs-nestedSortable-collapsed">
</li>
</ol>
</div>
-JQuery
$(".campos").remove(".sortable ui-sortable").remove();
Remove e apaga da div com classe "campos" todas os elementos com a classe "sortable ui-sortable"
$("ol").remove(".sortable ui-sortable").remove();
Remove e apaga todas as "ol" com classe "sortable ui-sortable"
$("li").remove("area no-nest mjs-nestedSortable-branch mjs-nestedSortable-collapsed").remove();
Remove e apaga todas as "li" com classe "area no-nest mjs-nestedSortable-branch mjs-nestedSortable-collapsed"
quarta-feira, 20 de agosto de 2014
Como fazer para saber se existe elemento repetido em um Array
//valida produtos repitidos
var produtos_repetidos = false;
var produtos = [];
for (var i = 0; i < e.PaginaCandidatoVariacao.length; i++) {
produtos.push(e.PaginaCandidatoVariacao[i].IdProduto);
}
var produtos_filtrados = produtos.filter(function (este, i) {
return produtos.indexOf(este) == i;
});
produtos_repetidos = (produtos_filtrados.length == produtos.length);
if (!produtos_repetidos) {
strMensagemErro.push([Candidato.objetosHtml.txtBuscaVariacao.attr("id"), "Existem produtos repetidos."]);
}
//valida produtos repitidos
var produtos_repetidos = false;
var produtos = [];
for (var i = 0; i < e.PaginaCandidatoVariacao.length; i++) {
produtos.push(e.PaginaCandidatoVariacao[i].IdProduto);
}
var produtos_filtrados = produtos.filter(function (este, i) {
return produtos.indexOf(este) == i;
});
produtos_repetidos = (produtos_filtrados.length == produtos.length);
if (!produtos_repetidos) {
strMensagemErro.push([Candidato.objetosHtml.txtBuscaVariacao.attr("id"), "Existem produtos repetidos."]);
}
//valida produtos repitidos
Como fazer um SELECT em um XML no SQL SERVER
Como fazer um SELECT em um XML no SQL SERVER
DECLARE @CodigoReferencia VARCHAR(50),
@PrecoAnterior DECIMAL(10,2),
@PrecoVenda DECIMAL(10,2),
@PrecoCusto DECIMAL(10,2),
@IdSku INTEGER,
@skus AS XML
SET @skus = '<sku>
<CodigoReferencia>519871703</CodigoReferencia>
<PrecoAnterior>161.88</PrecoAnterior>
<PrecoVenda>171.88</PrecoVenda>
</sku>'
DECLARE cursor_xml_sku CURSOR FOR
SELECT
@skus.value('(/sku//CodigoReferencia/node())[1]', 'VARCHAR(50)') as CodigoReferencia,
@skus.value('(/sku//PrecoAnterior/node())[1]', 'DECIMAL(10,2)') as PrecoAnterior,
@skus.value('(/sku//PrecoVenda/node())[1]', 'DECIMAL(10,2)') as PrecoVenda
FROM @skus.nodes('/sku') as ParamValues(VALOR)
-- Abrindo Cursor para leitura - cursor_xml_sku
OPEN cursor_xml_sku
-- Lendo a próxima linha - cursor_xml_sku
FETCH NEXT FROM cursor_xml_sku INTO @CodigoReferencia, @PrecoAnterior, @PrecoVenda
-- Percorrendo linhas do cursor (enquanto houverem) - cursor_xml_sku
WHILE @@FETCH_STATUS = 0
BEGIN
DECLARE cursor_sku CURSOR FOR
SELECT IdSKU,PrecoCusto FROM Sku WHERE CodigoReferencia = @CodigoReferencia
-- Abrindo Cursor para leitura - cursor_sku
OPEN cursor_sku
-- Lendo a próxima linha - cursor_sku
FETCH NEXT FROM cursor_sku INTO @IdSKU, @PrecoCusto
-- Percorrendo linhas do cursor (enquanto houverem) - cursor_sku
WHILE @@FETCH_STATUS = 0
BEGIN
-- Validações
IF (@PrecoCusto < @PrecoAnterior AND @PrecoCusto < @PrecoVenda)
BEGIN
SELECT @PrecoCusto, @PrecoAnterior, @PrecoVenda, @IdSKU
-- Atualizar Preço de Venda e Preço Anterior
UPDATE Sku
SET PrecoAnterior = @PrecoAnterior,
PrecoVenda = @PrecoVenda
WHERE IdSKU = @IdSku
END
-- Lendo a próxima linha - cursor_sku
FETCH NEXT FROM cursor_sku INTO @IdSKU, @PrecoCusto
END
-- Fechando Cursor para leitura - cursor_sku
CLOSE cursor_sku
-- Desalocando o cursor - cursor_sku
DEALLOCATE cursor_sku
-- Lendo a próxima linha - cursor_xml_sku
FETCH NEXT FROM cursor_xml_sku INTO @CodigoReferencia, @PrecoAnterior, @PrecoVenda
END
-- Fechando Cursor para leitura - cursor_xml_sku
CLOSE cursor_xml_sku
-- Desalocando o cursor - cursor_xml_sku
DEALLOCATE cursor_xml_sku
DECLARE @CodigoReferencia VARCHAR(50),
@PrecoAnterior DECIMAL(10,2),
@PrecoVenda DECIMAL(10,2),
@PrecoCusto DECIMAL(10,2),
@IdSku INTEGER,
@skus AS XML
SET @skus = '<sku>
<CodigoReferencia>519871703</CodigoReferencia>
<PrecoAnterior>161.88</PrecoAnterior>
<PrecoVenda>171.88</PrecoVenda>
</sku>'
DECLARE cursor_xml_sku CURSOR FOR
SELECT
@skus.value('(/sku//CodigoReferencia/node())[1]', 'VARCHAR(50)') as CodigoReferencia,
@skus.value('(/sku//PrecoAnterior/node())[1]', 'DECIMAL(10,2)') as PrecoAnterior,
@skus.value('(/sku//PrecoVenda/node())[1]', 'DECIMAL(10,2)') as PrecoVenda
FROM @skus.nodes('/sku') as ParamValues(VALOR)
-- Abrindo Cursor para leitura - cursor_xml_sku
OPEN cursor_xml_sku
-- Lendo a próxima linha - cursor_xml_sku
FETCH NEXT FROM cursor_xml_sku INTO @CodigoReferencia, @PrecoAnterior, @PrecoVenda
-- Percorrendo linhas do cursor (enquanto houverem) - cursor_xml_sku
WHILE @@FETCH_STATUS = 0
BEGIN
DECLARE cursor_sku CURSOR FOR
SELECT IdSKU,PrecoCusto FROM Sku WHERE CodigoReferencia = @CodigoReferencia
-- Abrindo Cursor para leitura - cursor_sku
OPEN cursor_sku
-- Lendo a próxima linha - cursor_sku
FETCH NEXT FROM cursor_sku INTO @IdSKU, @PrecoCusto
-- Percorrendo linhas do cursor (enquanto houverem) - cursor_sku
WHILE @@FETCH_STATUS = 0
BEGIN
-- Validações
IF (@PrecoCusto < @PrecoAnterior AND @PrecoCusto < @PrecoVenda)
BEGIN
SELECT @PrecoCusto, @PrecoAnterior, @PrecoVenda, @IdSKU
-- Atualizar Preço de Venda e Preço Anterior
UPDATE Sku
SET PrecoAnterior = @PrecoAnterior,
PrecoVenda = @PrecoVenda
WHERE IdSKU = @IdSku
END
-- Lendo a próxima linha - cursor_sku
FETCH NEXT FROM cursor_sku INTO @IdSKU, @PrecoCusto
END
-- Fechando Cursor para leitura - cursor_sku
CLOSE cursor_sku
-- Desalocando o cursor - cursor_sku
DEALLOCATE cursor_sku
-- Lendo a próxima linha - cursor_xml_sku
FETCH NEXT FROM cursor_xml_sku INTO @CodigoReferencia, @PrecoAnterior, @PrecoVenda
END
-- Fechando Cursor para leitura - cursor_xml_sku
CLOSE cursor_xml_sku
-- Desalocando o cursor - cursor_xml_sku
DEALLOCATE cursor_xml_sku
sexta-feira, 17 de janeiro de 2014
Como fazer um RESTORE no SQL SERVER 2008 usando sql command
Quando eu tentei fazer o restore usando o wizard do sql server eu recebi uma mensagem de erro.
Para resolver este problema eu abri uma New Query, mudei para o bando de dados diferente do que eu desejava fazer o restore e executei o seguinte comando:
RESTORE DATABASE MyDatabase FROM DISK='d:\arquivo.bak' with replace
Pronto! Banco restaurado! Muito Obrigado e até o próximo POST!
Para resolver este problema eu abri uma New Query, mudei para o bando de dados diferente do que eu desejava fazer o restore e executei o seguinte comando:
RESTORE DATABASE MyDatabase FROM DISK='d:\arquivo.bak' with replace
Pronto! Banco restaurado! Muito Obrigado e até o próximo POST!
sexta-feira, 3 de janeiro de 2014
JQuery - Como pegar o item selecionado do auto complete
Fazer o auto complete com jquery é relativamente simples, agora pegar o item selecionado é mais simples ainda. Segue o código:
$("#NomeAtivo").autocomplete({
source: function (request, response) {
$.ajax({
url: '@Url.Action("GetAtivo", "Ordem")',
dataType: "json",
data: {
term: request.term,
idTipoAtivo: $("#TipoAtivo").val()
},
success: function (data) {
response(data);
}
});
},
min_length: 3,
delay: 300,
select: function (a, b) {
if ($("#TipoAtivo").val() == 5) {
$.ajax({
url: '@Url.Action("CarregaPrecoExercicio", "Ordem")',
dataType: "json",
type: "POST",
data: {
codigoAtivo: b.item.value
},
success: function (data) {
$("#PrecoExercicio").val(data);
}
});
}
}
});
Muito Obrigado e até o próximo POST!
$("#NomeAtivo").autocomplete({
source: function (request, response) {
$.ajax({
url: '@Url.Action("GetAtivo", "Ordem")',
dataType: "json",
data: {
term: request.term,
idTipoAtivo: $("#TipoAtivo").val()
},
success: function (data) {
response(data);
}
});
},
min_length: 3,
delay: 300,
select: function (a, b) {
if ($("#TipoAtivo").val() == 5) {
$.ajax({
url: '@Url.Action("CarregaPrecoExercicio", "Ordem")',
dataType: "json",
type: "POST",
data: {
codigoAtivo: b.item.value
},
success: function (data) {
$("#PrecoExercicio").val(data);
}
});
}
}
});
Muito Obrigado e até o próximo POST!
quinta-feira, 2 de janeiro de 2014
Como saber se um acoluna já existe em uma tabela no SQL Server
Extsre duas formas de verificar se uma coluna já existe em uma tabela:
1 - Procedure do Sistema:
sp_columns @table_name = ´TABELATESTE´, @column_name = ´CAMPOTESTE´
2 - Select simples:
IF ((select count(name) from syscolumns where id=object_id(N'[dbo].[OrdemGrupo]') and name='ValorMedio') > 0)
BEGIN
ALTER TABLE OrdemGrupo
DROP COLUMN ValorMedio
END
Fonte: http://www.devmedia.com.br/forum/saber-se-uma-coluna-existe-na-tabela/34378
1 - Procedure do Sistema:
sp_columns @table_name = ´TABELATESTE´, @column_name = ´CAMPOTESTE´
2 - Select simples:
IF ((select count(name) from syscolumns where id=object_id(N'[dbo].[OrdemGrupo]') and name='ValorMedio') > 0)
BEGIN
ALTER TABLE OrdemGrupo
DROP COLUMN ValorMedio
END
Fonte: http://www.devmedia.com.br/forum/saber-se-uma-coluna-existe-na-tabela/34378
Javascript - Converter número para o formato moeda (Real)
Number.prototype.formatMoney = function(c, d, t){
var n = this, c = isNaN(c = Math.abs(c)) ? 2 : c, d = d == undefined ? "," : d, t = t == undefined ? "." : t, s = n < 0 ? "-" : "", i = parseInt(n = Math.abs(+n || 0).toFixed(c)) + "", j = (j = i.length) > 3 ? j % 3 : 0; return s + (j ? i.substr(0, j) + t : "") + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + t) + (c ? d + Math.abs(n - i).toFixed(c).slice(2) : ""); }; // usando (1000).formatMoney(2, ',', '.'); //retorna 1.000,00
quarta-feira, 1 de janeiro de 2014
W-Fi de graça
Quantas vezes você já não precisou acessar a internet na rua e ficou sem saber onde ou como.
E para completar encontra várias redes de Wi-Fi bloqueadas com senha. Na minha opinião todos deveriam deixar suas redes liberadas para que qualquer um pudesse acessar.
Enfim, segue o link que um aplicativos muito interessante para descobrir senhas de lugares públicos:
http://www.techtudo.com.br/tudo-sobre/s/mandic-magic.html
Fonte: http://www.techtudo.com.br/noticias/noticia/2013/12/saiba-onde-achar-wi-fi-gratis-em-sao-paulo-e-no-rio-de-janeiro.html
E para completar encontra várias redes de Wi-Fi bloqueadas com senha. Na minha opinião todos deveriam deixar suas redes liberadas para que qualquer um pudesse acessar.
Enfim, segue o link que um aplicativos muito interessante para descobrir senhas de lugares públicos:
http://www.techtudo.com.br/tudo-sobre/s/mandic-magic.html
Fonte: http://www.techtudo.com.br/noticias/noticia/2013/12/saiba-onde-achar-wi-fi-gratis-em-sao-paulo-e-no-rio-de-janeiro.html
Gerenciador de Arquivos gratuito e sem limite de armazenamento
No primeiro POST do ano quero lhes apresentar o MINHATECA, que permite que o usuário armazene arquivos sem limite e na nuvem. Grande dica para quem tem que criar varias contas no Dropbox para conseguir armazenar seus arquivos todos.
Segue o link e aproveite: http://www.techtudo.com.br/tudo-sobre/s/minhateca.html
Muito Obrigado e até o próximo POST!
Segue o link e aproveite: http://www.techtudo.com.br/tudo-sobre/s/minhateca.html
Muito Obrigado e até o próximo POST!
Assinar:
Postagens (Atom)