Usuário com melhor resposta
Recuperar um ID

Pergunta
-
Tenho o seginte código.
SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["E-IndustriasConnectionString"].ConnectionString);clsCript cript = new clsCript();
senha = cript.encrypt(txtSenha.Text);
SqlCommand cmd = new SqlCommand("USP_Pec_01_Usuarios_Seleciona", conn);
cmd.CommandType =
CommandType.StoredProcedure;
SqlParameter Login = new SqlParameter("@Login", SqlDbType.VarChar, 50);
Login.Value =
this.txtLogin.Text.Trim();
cmd.Parameters.Add(Login);
SqlParameter Senha = new SqlParameter("@Senha", SqlDbType.VarChar, 255);
Senha.Value = senha;
cmd.Parameters.Add(Senha);
SqlParameter Situacao = new SqlParameter("@Situacao", SqlDbType.VarChar, 7);
Situacao.Value =
"Ativo";
cmd.Parameters.Add(Situacao);
SqlParameter prChTipo;
prChTipo =
new SqlParameter("@CH_TIPO", SqlDbType.Int, 4);
prChTipo.Value = 0;
cmd.Parameters.Add(prChTipo);
prChTipo.Direction =
ParameterDirection.InputOutput;
try
{
conn.Open();
grupo =
Convert.ToString(cmd.ExecuteScalar());
Session[
"Codigo"] = prChTipo.Value.ToString();
Session[
"CHTIPO"] = prChTipo.Value.ToString();
conn.Close();
}
catch (Exception ex)
{
Response.Write(ex.ToString());
}....
Na minha base de dados, SQL SERVER 2005, tenho um campo ch_top.
Como faço para capturar este compo e coloca-lo dentro de uma session.
O campo ja está sendo selecionado na procedure.
Grato
Dirceu
DMA2
Respostas
-
Isso tem a ver com a lógica do seu SELECT.
Faça assim:
SELECT CH_TOP, login, senha FROM Tb_Pec_01_Usuarios
WHERE (@LOGIN IS NULL OR LOGIN LIKE '%' + @LOGIN +'%' )
AND
(@SENHA IS NULL OR SENHA LIKE '%' + @SENHA +'%' )- Sugerido como Resposta Seilor Bonancio JuniorModerator quinta-feira, 19 de novembro de 2009 19:08
- Marcado como Resposta Harley Araujo sexta-feira, 20 de novembro de 2009 11:09
Todas as Respostas
-
-
No final da execução da sua proc coloque
SELECT SCOPE_IDENTITY ()
Depois coloque o parameterdirection
SqlCommand cmd = new SqlCommand("sp_getIdentity", connection);
connection.Open();
SqlParameter sp= new SqlParameter("@id",SqlDbType.Int);
sp.Direction = ParameterDirection.Output;
cmd.CommandType = CommandType.StoredProcedure;cmd.Parameters.Add(sp);
int id=sp.Value.ToString();
-
-
-
Procedure:
ALTER
PROCEDURE [dbo].[USP_Pec_01_Usuarios_Seleciona]
@LOGIN
AS varchar(50),
@SENHA
AS varchar(255),
@SITUACAO
AS varchar(7),
@CH_TIPO
AS int OUTPUT
As
if
(@login Is Not Null)
Begin
SET NOCOUNT ON
SELECT
a.Descricao, a.ch_top from Tb_Pec_01_Usuarios_Grupos a
INNER
JOIN Tb_Pec_01_Usuarios b ON a.ch_top=b.grupo WHERE Login = @Login AND Senha = @Senha And Situacao = @Situacao
SELECT
ch_top from TTb_Pec_01_Usuarios WHERE Login = @Login AND Senha = @Senha And Situacao = @Situacao
SET
@CH_TIPO = (SELECT ch_top from Tb_Pec_01_Usuarios WHERE Login = @Login AND Senha = @Senha And Situacao = @Situacao )
update
Tb_Pec_01_Usuarios
set situacao = 'Inativo' WHERE Data_Vencimento > Data_Cadastro + 365
SET
NOCOUNT OFF
End
Else
Begin
SET NOCOUNT ON
Select nome From tbl_pec_01_Usuarios
SET NOCOUNT OFF
End
RETURN
Se faço a seleção cmo usaso no chtipo da erro no Global.asax
protected void Application_AuthenticateRequest(object sender, EventArgs e)
{
HttpCookie Cookie;
Cookie = Request.Cookies[
FormsAuthentication.FormsCookieName];
if ((Cookie != null))
{
string encTik;
GenericIdentity GI;
GenericPrincipal GP;
FormsAuthenticationTicket tik;
encTik = Cookie.Value;
tik =
FormsAuthentication.Decrypt(encTik);
GI =
new GenericIdentity(tik.Name);
GP =
new GenericPrincipal(GI, new string[] { tik.UserData });
Context.User = GP;
}
}
</
script>
DMA2 -
Fale,
Olha esses links:
http://social.msdn.microsoft.com/Forums/pt-BR/vscsharppt/thread/ab93740b-61f7-4ef6-b693-9978b9060cb8
http://msdn.microsoft.com/pt-br/library/cc517962.aspx
Olha esse exemplo do link http://msdn.microsoft.com/pt-br/library/system.data.sqlclient.sqlcommand.executescalar.aspx :
static public int AddProductCategory(string newName, string connString)
{
Int32 newProdID = 0;
string sql =
"INSERT INTO Production.ProductCategory (Name) VALUES (@Name); "
+ "SELECT CAST(scope_identity() AS int)";
using (SqlConnection conn = new SqlConnection(connString))
{
SqlCommand cmd = new SqlCommand(sql, conn);
cmd.Parameters.Add("@Name", SqlDbType.VarChar);
cmd.Parameters["@name"].Value = newName;
try
{
conn.Open();
newProdID = (Int32)cmd.ExecuteScalar();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
return (int)newProdID;
}
Abraço!
Se a resposta solucionar sua dúvida, favor - Votar como Útil Abraço! -
-
Olá,
Não foi possível fazer isso.
Só pode ser passado um valor?
Como faço para criar 2 variável publicas, armazenar nelas o login e senha e numa página seguinte recuperar o valor destas variveis para fazer a consulta e resgatar o ch_top.
A pessoa entra, coloca login e senha e na pagina para onde vai ser direcionada, captro o login e a senha efaço a busca antes de segir com o processo.
...
DMA2 -
-
Fale,
Complementando Seilor quanto a criptografia olha esses links:
http://www.danielgarcia.com.br/post/Criptografando-a-QueryString-de-uma-URL-com-ASPNET.aspx
http://diariodafonte.wordpress.com/2009/04/10/criptografando-a-querystring/
Abraço!
Se a resposta solucionar sua dúvida, favor - Votar como Útil Abraço! -
Olá,
Uma útima tentativa, antes de partir para session:
Tenho na procedure;
ALTER PROCEDURE [dbo].[USP_Pec_01_Usuarios_Seleciona]
@LOGIN AS varchar(50),
@SENHA AS varchar(255),
@SITUACAO AS varchar(7),
@CH_TIPO AS int OUTPUT
As
if (@login Is Not Null)
Begin
SET NOCOUNT ON
SELECT a.Descricao, a.ch_top from Tb_Pec_01_Usuarios_Grupos a
INNER JOIN Tb_Pec_01_Usuarios b ON a.ch_top=b.grupo WHERE Login = @Login AND Senha = @Senha And Situacao = @SituacaoSELECT ch_top from Tb_Pec_01_Usuarios WHERE Login = @Login AND Senha = @Senha And Situacao = @Situacao
SET @CH_TIPO = (SELECT ch_top from Tb_Pec_01_Usuarios WHERE Login = @Login AND Senha = @Senha And Situacao = @Situacao )
update Tb_Pec_01_Usuarios
set situacao = 'Inativo' WHERE Data_Vencimento > Data_Cadastro + 3650
SET NOCOUNT OFFEnd
Else
Begin
SET NOCOUNT ON
Select nome From tbl_pec_01_Usuarios
SET NOCOUNT OFF
End
RETURN
.................
Tenho essa seleçãoSELECT ch_top from Tb_Pec_01_Usuarios WHERE Login = @Login AND Senha = @Senha And Situacao = @Situacao
Tem outra forma de recuperar este valor na rotina sem usar o SqlParameter?
protected void btnLogin_Click(object sender, EventArgs e)
{
SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["E-IndustriasConnectionString"].ConnectionString);clsCript cript = new clsCript();
senha = cript.encrypt(txtSenha.Text);SqlCommand cmd = new SqlCommand("USP_Pec_01_Usuarios_Seleciona", conn);
cmd.CommandType = CommandType.StoredProcedure;SqlParameter Login = new SqlParameter("@Login", SqlDbType.VarChar, 50);
Login.Value = this.txtLogin.Text.Trim();
cmd.Parameters.Add(Login);SqlParameter Senha = new SqlParameter("@Senha", SqlDbType.VarChar, 255);
Senha.Value = senha;
cmd.Parameters.Add(Senha);SqlParameter Situacao = new SqlParameter("@Situacao", SqlDbType.VarChar, 7);
Situacao.Value = "Ativo";
cmd.Parameters.Add(Situacao);SqlParameter prChTipo;
prChTipo = new SqlParameter("@CH_TIPO", SqlDbType.Int, 4);
prChTipo.Value = 0;
cmd.Parameters.Add(prChTipo);
prChTipo.Direction = ParameterDirection.InputOutput;try
{
conn.Open();
grupo = Convert.ToString(cmd.ExecuteScalar());
Session["Codigo"] = prChTipo.Value.ToString();
Session["CHTIPO"] = prChTipo.Value.ToString();
conn.Close();
}
catch (Exception ex)
{
Response.Write(ex.ToString());
}
finally
{
if (grupo == "")
{
this.lblMensagem.Visible = true;
}
else
{
string encTik;
HttpCookie Cookie;
FormsAuthenticationTicket tik;tik = new FormsAuthenticationTicket(1, txtLogin.Text, DateTime.Now, DateTime.Now.AddDays(1), chkLembrar.Checked, grupo);
encTik = FormsAuthentication.Encrypt(tik);
Cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encTik);
if (chkLembrar.Checked)
{
Cookie.Expires = DateTime.Now.AddDays(1);
}
Response.Cookies.Add(Cookie);
Response.Redirect(FormsAuthentication.GetRedirectUrl(txtLogin.Text, chkLembrar.Checked));
conn.Close();
}
}
}
DMA2 -
-
Amigo, não consegui applicar a minha rorina.
Poderia me ajudar, tentei maos não funcionou..
Este é o campo que quero trazer o conteudo.
ch_top, como ficaria aplicato, compo tipo int
param = new SqlParameter("@IDTerra", SqlDbType.Int);
param.Value = IDTerra;
parameters.Add(param);
DMA2 -
-
-
-
Bom dia,
Fiz o seguinte,
Passei o login e senha via session, como façp para buscar na tabela de usuarios o ch_top, baseado nesses dois parâmentros.
Teria um exemplo?
Fiz Dessa forma mas não deu certo.
Código:protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
preencheGrid(ch_top);
}
}
private void preencheGrid(string ch_top)
{
clsOfertas artigo = new clsOfertas();
DataSet dtSet = artigo.BuscaCategoriasGrid(Session["ch_Login"].ToString(), Session["ch_Senha"].ToString());if (dtSet != null)
{
if (dtSet.Tables[0].Rows.Count > 0)
{
this.ch_top.Text = dtSet.Tables[0].Rows[0][2].ToString();
}
}
}Classe:
/// </summary>
/// Metodo que busca links
/// Preenchimento tópicos de links
/// <param name="receita"></param>
/// <returns></returns>
public DataSet BuscaCategoriasGrid(string login, string senha)
{
try
{
sBanco.conecta();SqlCommand sqlc = sBanco.sConn.CreateCommand();
sqlc.CommandText = "USP_EI_01_Usuarios_Busca_ch_top";
sqlc.CommandType = CommandType.StoredProcedure;sqlc.Parameters.Add("@LOGIN", SqlDbType.VarChar, 150);
sqlc.Parameters["@LOGIN"].Value = login;sqlc.Parameters.Add("@SENHA", SqlDbType.VarChar, 255);
sqlc.Parameters["@SENHA"].Value = senha;SqlDataAdapter dtAdapter = new SqlDataAdapter(sqlc);
DataSet dtSet = new DataSet();
dtAdapter.Fill(dtSet);
return dtSet;}
catch (Exception e)
{
throw new Exception("erro na classe clsCategorias.cs[Relatórios de categorias]" + e.Message);
}
finally
{
sBanco.desconecta();
}
}Procedure:
ALTER PROCEDURE [dbo].[USP_Pec_01_Usuarios_Busca_ch_top]
@LOGIN AS varchar(50),
@SENHA AS varchar(255),
As
if (@login Is Not Null)
Begin
SET NOCOUNT ONSELECT ch_top, login, senha from Tb_Pec_01_Usuarios WHERE Login = @Login AND Senha = @Senha
End
Grato
Dirceu
DMA2 -
-
Olá,
Postei a procedure errada, esta é a correta
ALTER
PROCEDURE [dbo].[USP_EI_01_Usuarios_Busca_ch_top]
@login
AS varchar(50),
@senha
AS varchar(255)
As
BEGIN
SET
NOCOUNT ON
SELECT
CH_TOP, login, senha FROM Tb_Pec_01_Usuarios
WHERE
(@LOGIN IS NULL OR (@LOGIN IS NOT NULL AND LOGIN LIKE '%' + @LOGIN +'%' ))
AND (@SENHA IS NULL OR (@SENHA IS NOT NULL AND LOGIN LIKE '%' + @SENHA +'%' ))
SET
NOCOUNT OFF
END
DMA2 -
-
-
-
Olá,
O que tentei fazer foi isso. Montar um Data Set e pegar dai o ch_top. Passando o Login e a senha como parâmetro de busca, veja:
Teria um exemplo?
Fiz Dessa forma mas não deu certo.
Código:protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
preencheGrid(ch_top);
}
}
private void preencheGrid(string ch_top)
{
clsOfertas artigo = new clsOfertas();
DataSet dtSet = artigo.BuscaCategoriasGrid(Session["ch_Login"].ToString(), Session["ch_Senha"].ToString());if (dtSet != null)
{
if (dtSet.Tables[0].Rows.Count > 0)
{
this.ch_top.Text = dtSet.Tables[0].Rows[0][2].ToString();
}
}
}...........................................................................................................................................................
Classe:
/// </summary>
/// Metodo que busca links
/// Preenchimento tópicos de links
/// <param name="receita"></param>
/// <returns></returns>
public DataSet BuscaCategoriasGrid(string login, string senha)
{
try
{
sBanco.conecta();SqlCommand sqlc = sBanco.sConn.CreateCommand();
sqlc.CommandText = "USP_EI_01_Usuarios_Busca_ch_top";
sqlc.CommandType = CommandType.StoredProcedure;sqlc.Parameters.Add("@LOGIN", SqlDbType.VarChar, 150);
sqlc.Parameters["@LOGIN"].Value = login;sqlc.Parameters.Add("@SENHA", SqlDbType.VarChar, 255);
sqlc.Parameters["@SENHA"].Value = senha;SqlDataAdapter dtAdapter = new SqlDataAdapter(sqlc);
DataSet dtSet = new DataSet();
dtAdapter.Fill(dtSet);
return dtSet;}
catch (Exception e)
{
throw new Exception("erro na classe clsCategorias.cs[Relatórios de categorias]" + e.Message);
}
finally
{
sBanco.desconecta();
}
}set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
-- ================================================
-- Dirceu Martins de Azevedo
-- procedure USP_EI_01_categorias_Relatorio
--
-- Monta o relatório para manutenção dos dados
-- dados passados pela classe cLScATEGORIAS.cs
-- Artigos - Atualizar.aspx
--
-- Para todas as páginas de CATEGORIAS do portal
-- www.e-industrias.com.br.
-- ================================================
ALTER PROCEDURE [dbo].[USP_EI_01_Usuarios_Busca_ch_top]
@login AS varchar(50),
@senha AS varchar(255)
As
BEGIN
SET NOCOUNT ON
SELECT CH_TOP, login, senha FROM Tb_Pec_01_Usuarios
WHERE (@LOGIN IS NULL OR (@LOGIN IS NOT NULL AND LOGIN LIKE '%' + @LOGIN +'%' ))
AND (@SENHA IS NULL OR (@SENHA IS NOT NULL AND LOGIN LIKE '%' + @SENHA +'%' ))
SET NOCOUNT OFF
END
Não dá erro, mas tambem não retorna nada.
abs,
DMA2 -
Isso tem a ver com a lógica do seu SELECT.
Faça assim:
SELECT CH_TOP, login, senha FROM Tb_Pec_01_Usuarios
WHERE (@LOGIN IS NULL OR LOGIN LIKE '%' + @LOGIN +'%' )
AND
(@SENHA IS NULL OR SENHA LIKE '%' + @SENHA +'%' )- Sugerido como Resposta Seilor Bonancio JuniorModerator quinta-feira, 19 de novembro de 2009 19:08
- Marcado como Resposta Harley Araujo sexta-feira, 20 de novembro de 2009 11:09
-
-
Bom dia,
Identifiquei o erro ques estava ocorrendo.
Esta tentando usar e ch_top.Text não funcionava, não trazia nada.
Então fiz o seguinte:
string
varteste = this.ch_top.Text = dtSet.Tables[0].Rows[0][0].ToString();
Peguei o conteudo de varteste e mandei gravar, deu certo.
Muito obrigado pela ajuda!- Sugerido como Resposta Dirceu M. Azevedo sexta-feira, 20 de novembro de 2009 11:18