Inquiridor
Selecionar um campo

Pergunta
-
Olá pessoal,
Tenho esta procedure, preciso selecionar o campo ch_top da tabela Tb_Pec_01_Usuarios.
ALTER
PROCEDURE [dbo].[USP_Pec_01_Usuarios_Seleciona]@LOGIN
AS varchar(50),@SENHA
AS varchar(255),@SITUACAO
AS varchar(7)As
if
(@login Is Not Null)Begin
SET NOCOUNT ONSELECT
a.Descricao from Tb_Pec_01_Usuarios_Grupos aINNER
JOIN Tb_Pec_01_Usuarios b ON a.ch_top=b.grupo WHERE Login = @Login AND Senha = @Senha And Situacao = @Situacaoupdate
Tb_Pec_01_Usuarios set situacao = 'Inativo' WHERE Data_Vencimento > Data_Cadastro + 365SET
NOCOUNT OFFEnd
Else
Begin
Grato
Dirceu
Todas as Respostas
-
Boas,
Não entendi muito bem, mas de acordo com a estrutura que vc colocou basta fazer isso:
Code SnippetSELECT
a.Descricao,
b.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 -
Olá Daniel,
Esse é meu problema, estou usando ExecuteScalar()...
Tenho esta rotina, que recebe um parâmetro de uma procedure. Visto que usando o ExecuteScalar(), me retornará smente um campo, como devo proceder para que retorne além do grupo, me retorne mais o campo ch_top da tabela Tb_Pec_01_Usuarios.
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);
try
{
conn.Open();
grupo =
Convert.ToString(cmd.ExecuteScalar());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.AddMinutes(20), 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));Procedure.............................
ALTER
PROCEDURE [dbo].[USP_Pec_01_Usuarios_Seleciona]@LOGIN
AS varchar(50),@SENHA
AS varchar(255),@SITUACAO
AS varchar(7)As
if
(@login Is Not Null)Begin
SET NOCOUNT ONSELECT
a.Descricao from Tb_Pec_01_Usuarios_Grupos aINNER
JOIN Tb_Pec_01_Usuarios b ON a.ch_top=b.grupo WHERE Login = @Login AND Senha = @Senha And Situacao = @Situacaoupdate
Tb_Pec_01_Usuarios set situacao = 'Inativo' WHERE Data_Vencimento > Data_Cadastro + 365SET
NOCOUNT OFFEnd
Else
Begin
SET NOCOUNT ON Select nome From tbl_pec_01_Usuarios SET NOCOUNT OFFEnd
RETURN
Grato,
Dirceu
-
Haaa... tendi agora :.)
O ExecuteScalar retorna pra vc a primeira coluna da primeira linha da sua consulta, ou seja, sempre 1 valor.
Voce poderia entao criar um DataAdapter e usar o FILL para popular um dataset com o retorno da procedure.
...
Dim da As SqlDataAdapter = New SqlDataAdapter
Dim ds As New DataSet
da.SelectCommand = cmd
da.Fill(ds)
...
Para ler dados de um dataset use:
ds.Tables(0).item("nomeDoCampoRetornadoPelaProcedure")