Jump to content


Photo

Saber Retorno De Query


  • Faça o login para participar
5 replies to this topic

#1 maxim

maxim

    Normal

  • Usuários
  • 93 posts
  • Sexo:Não informado

Posted 11/02/2006, 16:35

Olá,

para eu inserir dados na minha base de dados uso uma função.

O problema é que eu agora quero saber o resultado dela.
Quando eu altero directamente na base de dados, eu recebo o retorno:

"1 row affected"

Eu queria receber o mesmo na minha pagina asp.

O que eu tenho de pôr nesta função?

Public Function Insertdados(ByVal sql As String) As XXXXXXX
        Try
            Dim conn As New System.Data.SqlClient.SqlConnection(conexao)
            Dim cmd As New System.Data.SqlClient.SqlCommand(sql, conn)
            conn.Open()
            cmd.ExecuteNonQuery()
            conn.Close()
            Return XXXXXXX
        Catch ex As System.Data.SqlClient.SqlException
            Throw
        End Try
    End Function

Alguém sabe??
Muito obrigado,
Max

#2 Felipe Pena

Felipe Pena

    O temor do Senhor é o princípio da sabedoria

  • Ex-Admins
  • 6441 posts
  • Sexo:Masculino

Posted 11/02/2006, 18:10

Um exemplo feito em C#:
Console.WriteLine("Total rows affected:" + MyCommand.ExecuteNonQuery());

Espero que te ajude.
Felipe Pena
[...] ó terra, terra, terra; ouve a palavra do Senhor. — Jeremias 22:29

#3 maxim

maxim

    Normal

  • Usuários
  • 93 posts
  • Sexo:Não informado

Posted 12/02/2006, 14:39

Muito obrigado, estou usando VB, para net, e fiz

response.write(cmd.executenonquery()) e deu...

Mas estou com outra duvida!

Se o meu string for "insert into table values...." ele retorna quantas "rows affected"

Mas, imaginando agora que o meu string era:

CREATE TABLE [dbo].[teste] (
	[id] [int] IDENTITY (1, 1) NOT NULL ,
	[nome] [nvarchar] (20) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

quando eu uso a mesma função, ele cria de facto essa tabela, mas depois retorna a dizer que deu erro porque ela já existe! (e não existia ainda)

Ou seja, não posso usar cmd.executeNonQuery como no Insert :(
O que devo utilizar então?

É que estou tentando criar um script identico ao do phpmyadmin mas para sql!

Obrigadão,
Max

#4 felipecm

felipecm

    Expert

  • Usuários
  • 541 posts
  • Sexo:Não informado
  • Localidade:ABC / SP

Posted 12/02/2006, 18:01

Muito obrigado, estou usando VB, para net, e fiz

response.write(cmd.executenonquery()) e deu...

Mas estou com outra duvida!

Se o meu string for "insert into table values...." ele retorna quantas "rows affected"

Mas, imaginando agora que o meu string era:

CREATE TABLE [dbo].[teste] (
	[id] [int] IDENTITY (1, 1) NOT NULL ,
	[nome] [nvarchar] (20) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

quando eu uso a mesma função, ele cria de facto essa tabela, mas depois retorna a dizer que deu erro porque ela já existe! (e não existia ainda)

Ou seja, não posso usar cmd.executeNonQuery como no Insert :(
O que devo utilizar então?

É que estou tentando criar um script identico ao do phpmyadmin mas para sql!

Obrigadão,
Max

Se deu problema .. verifica se vc tem permissão no usuário para fazer alterações de estrutura na tabela. E se tiver, faz uma verificação de rotina, para evitar erros caso a tabela já exista. É só verificar se a tabela consta em sysobjects (sys.objects no 2005!):
IF EXISTS (SELECT name FROM sysobjects WHERE id = object_id(N'TableName') AND OBJECTPROPERTY(id, N'IsTable') = 1) 
  DROP TABLE TableName

E outra coisa, retorne o conteudo do ExecuteNonQuery() para uma variavel, e faça uma verificação com IsDbNull() antes de apresentar os dados.
MCAD, MCP

#5 maxim

maxim

    Normal

  • Usuários
  • 93 posts
  • Sexo:Não informado

Posted 12/02/2006, 21:14

O problema é que eu estava executando duas vezes a mesma query!!!
Por exemplo, se eu criasse uma tabela, o script criáva a primeira, e depois quando tentava criar a segunda dizia que já existia!
Isto porque eu tinha este código:

conn.Open()
cmd.ExecuteNonQuery()
Dim result As String = cmd.ExecuteNonQuery()
conn.Close()

Estava bem na frente dos meus olhos....

Agora quando eu faço um insert ele lança-me os 'rows' que foram afectados, mas quando faço um 'drop table' ou 'create table' ele responde com "-1"
Mas quando eu suo o 'sql query analyzer' e faço um create table ele respondo com:
"The command(s) completed successfully."

Mas pronto... se retorna com "-1" já é qq coisa... :)

O código final ficou assim:

Dim conn As New System.Data.SqlClient.SqlConnection(conexao)
            Dim cmd As New System.Data.SqlClient.SqlCommand(sql, conn)
            conn.Open()
            Dim result As String = cmd.ExecuteNonQuery()
            conn.Close()
            If IsDBNull(result) Then
                result = "nulo"
                Return result
            Else
                Return result
            End If
        Catch ex As System.Data.SqlClient.SqlException
            Return ex.ToString
            'Throw
        End Try

Nunca tinha usado o isdbnull()... espero que tenha usado bem. Pelo menos agora resultou!

OBRIGADO!!!!!
Max

#6 RonsisM

RonsisM

    Super Veterano

  • Usuários
  • 15724 posts
  • Sexo:Masculino
  • Localidade:Plovdiv

Posted 12/11/2017, 12:29

Viagra Ohne Rezept Preisvergleich viagra Brandlevitra On Line Generic Propecia Best




1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq