Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

antidzrt

Database Insert

Mensagens Recomendadas

antidzrt

Ainda não atinei com as bases de dados  :wallbash: 

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
'caminho da base de dados
        Dim strConn As String
        strConn = WebConfigurationManager.ConnectionStrings("gesviaConnectionString").ConnectionString
        'comando de sql que se pretende, neste caso for para inserir registo
        Dim SQl As String = "INSERT INTO Principal ,Marca ([Nome],[servico],[n_mec],[Categoria],[Ano],[n_selo],[marca1],[marca2],[marca3],[marca4],[marca5],[marca6],[marca7],[marca8],[marca9],[matricula1],[matricula2],[matricula3],[matricula4],[matricula5],[matricula6],[matricula7],[matricula8],[matricula9],[ano1],[ano2],[ano3],[ano4],[ano5],[ano6],[ano7],[ano8],[ano9])Values(nome,serviço,n_mec,Categoria,n_selo,marca1,marca2,marca3,marca4,marca5,marca6,marca7,marca8,marca9,matricula1,matricula2,matricula3,matricula4,matricula5,matricula6,matricula7,matricula8,matricula9,ano1,ano2,ano3,ano4,ano5,ano6,ano7,ano8,ano9);"

        'conecçao a bd
        Dim connection As New SqlConnection(strConn)
        'definir uma variavel para guardar os valores que se pretende enviar para a base de dados
        Dim valores As New SqlCommand(SQl, connection)
        valores.Parameters.Add("@Nome", SqlDbType.VarChar).Value = Nome.Text
        valores.Parameters.Add("@Servico", SqlDbType.VarChar).Value = Servico.Text
        valores.Parameters.Add("@n_mec", SqlDbType.Int).Value = n_mec.Text
        valores.Parameters.Add("@Categoria", SqlDbType.VarChar).Value = Categoria.Text
        valores.Parameters.Add("@n_selo", SqlDbType.Int).Value = n_selo.Text
        valores.Parameters.Add("@marca1", SqlDbType.VarChar).Value = Marca1.SelectedItem.Value
        valores.Parameters.Add("@marca2", SqlDbType.VarChar).Value = Marca3.SelectedItem.Value
        valores.Parameters.Add("@marca3", SqlDbType.VarChar).Value = Marca3.SelectedItem.Value
        valores.Parameters.Add("@marca4", SqlDbType.VarChar).Value = Marca4.SelectedItem.Value
        valores.Parameters.Add("@marca5", SqlDbType.VarChar).Value = Marca5.SelectedItem.Value
        valores.Parameters.Add("@marca6", SqlDbType.VarChar).Value = Marca6.SelectedItem.Value
        valores.Parameters.Add("@marca7", SqlDbType.VarChar).Value = Marca7.SelectedItem.Value
        valores.Parameters.Add("@marca8", SqlDbType.VarChar).Value = Marca8.SelectedItem.Value
        valores.Parameters.Add("@marca9", SqlDbType.VarChar).Value = Marca9.SelectedItem.Value
        valores.Parameters.Add("@matricula1", SqlDbType.VarChar).Value = Matricula1.Text
        valores.Parameters.Add("@matricula2", SqlDbType.VarChar).Value = Matricula2.Text
        valores.Parameters.Add("@matricula3", SqlDbType.VarChar).Value = Matricula3.Text
        valores.Parameters.Add("@matricula4", SqlDbType.VarChar).Value = Matricula4.Text
        valores.Parameters.Add("@matricula5", SqlDbType.VarChar).Value = Matricula5.Text
        valores.Parameters.Add("@matricula6", SqlDbType.VarChar).Value = matricula6.Text
        valores.Parameters.Add("@matricula7", SqlDbType.VarChar).Value = matricula7.Text
        valores.Parameters.Add("@matricula8", SqlDbType.VarChar).Value = matricula8.Text
        valores.Parameters.Add("@matricula9", SqlDbType.VarChar).Value = matricula9.Text
        valores.Parameters.Add("@Ano1", SqlDbType.Int).Value = Ano1.SelectedItem.Value
        valores.Parameters.Add("@Ano2", SqlDbType.Int).Value = Ano2.SelectedItem.Value
        valores.Parameters.Add("@Ano3", SqlDbType.Int).Value = Ano3.SelectedItem.Value
        valores.Parameters.Add("@Ano4", SqlDbType.Int).Value = Ano4.SelectedItem.Value
        valores.Parameters.Add("@Ano5", SqlDbType.Int).Value = Ano5.SelectedItem.Value
        valores.Parameters.Add("@Ano6", SqlDbType.Int).Value = Ano6.SelectedItem.Value
        valores.Parameters.Add("@Ano7", SqlDbType.Int).Value = Ano7.SelectedItem.Value
        valores.Parameters.Add("@Ano8", SqlDbType.Int).Value = Ano8.SelectedItem.Value
        valores.Parameters.Add("@Ano9", SqlDbType.Int).Value = Ano9.SelectedItem.Value


        connection.Open()

        Dim x As Integer = valores.ExecuteNonQuery()

        If x < 1 Then
            MsgBox("Pedido registado")
        End If

        ' Fecha a ligação e limpa as variáveis
        connection.Close()
        connection = Nothing
        valores = Nothing

    End Sub

Dame um erro quando vou a enserir

Input string was not in a correct format

Line 58:        connection.Open()

Line 59:

Line 60:        Dim x As Integer = valores.ExecuteNonQuery()

Line 61:

Line 62:        If x < 1 Then

    Line: 60

JA tive no google a pesquisar mas o inglês e muito mau

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
renafi

Assim é pouco complicado descobrir. Vais ter de fazer um debug. De qualquer das formas, assim à primeira vista, vê se estás a enviar só númerico aqui:

        valores.Parameters.Add("@n_mec", SqlDbType.Int).Value = n_mec.Text

        valores.Parameters.Add("@n_selo", SqlDbType.Int).Value = n_selo.Text


Oracle Certified Professional - AdministraçãoOracle Certified Professional - Pl/sqlMCPD - Microsoft Certified Professional DeveloperMCTS - Microsoft Certified Technology Specialist

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
antidzrt

Penso que ja sei qual seja o problema os campos nao tão todos preenchidos so tenho 1 matricula visivel, as outras são para quem tem mais que um carro e não tao visiveis

mas ao preencher todos os campos dá-me outro erro

Incorrect syntax near ','.

Line 58:        connection.Open()

Line 59:

Line 60:        Dim x As Integer = valores.ExecuteNonQuery()

Line 61:

Line 62:        If x < 1 Then

    Line: 60

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
ribeiro55

O problema indicado está ainda antes disso tudo:

INSERT INTO Principal ,Marca

Ou estás a inserir para a tabela Principal, ou estás a inserir na marca... em que ficamos? :D

Para além disso, para usares os parâmetros na query, o nome tem de estar seguido de um "@".

Por exemplo:

VALUES(@nome,@servico)


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
ribeiro55

Eu percebi que o quisesses fazer.

A Microsoft é que não gosta de ti.

Ou fazes um trigger para insert numa das tabelas, para que escreva na outra, ou executas a query duas vezes.

INSERT não prevê mais do que uma tabela.


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
antidzrt

Como é que executo a query 2 vezes?

Faço 2 inserts?

ngm tem um exemplo de como executar a query 2 vezes? e que tou me a baralhar todo com as conecções

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
bioshock

O problema indicado está ainda antes disso tudo:

INSERT INTO Principal ,Marca

Ou estás a inserir para a tabela Principal, ou estás a inserir na marca... em que ficamos? :)

Para além disso, para usares os parâmetros na query, o nome tem de estar seguido de um "@".

Por exemplo:

VALUES(@nome,@servico)

Convém leres o que as pessoas te tentam dizer antidzrt

O teu insert está mal feito.

Como o ribeiro disse, tens de ter algo assim:

Dim query As String = "INSERT INTO TabelaClientes([cliente], [morada], [telefone], [Email]) VALUES (@cliente, @morada, @telefone, @email);"

Depois, quando fazes esta linha de código:

Dim x As Integer = valores.ExecuteNonQuery()

        If x < 1 Then
            MsgBox("Pedido registado")
        End If

Está mal, pelo menos a mensagem lol..

O ExecuteNonQuery serve para retornar o número de registos afectados. Portanto, o teu código deveria ser:

Dim x As Integer = valores.ExecuteNonQuery()

        If x < 1 Then
            MsgBox("Erro ao registar!")
         Else
            Msgbox("Registado com sucesso!")
        End If

EDIT: Para explicar melhor o último parágrafo: Se 'x' for < (menor) do que 1 (logo é igual a 0) significa que não conseguiu inserir com sucesso, caso contrário, se for > (maior) do que 1 então regista com sucesso.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
antidzrt

Eu li... foi logo a 1 coisa que mudei  :)

vou mudar a Msgbox  :(

O meu problema e que não sei onde e que heide de por o outro Insert pa fazer a outra query

Agora tenho assim o codigo

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
        'caminho da base de dados
        Dim strConn As String
        strConn = WebConfigurationManager.ConnectionStrings("gesviaConnectionString").ConnectionString
        'comando de sql que se pretende, neste caso for para inserir registo
        Dim SQl As String = "INSERT INTO Principal  ([Nome],[servico],[n_mec],[Categoria],[Ano],[n_selo])Values(@nome,@servico,@n_mec,@Categoria,@n_selo);"
        'conecçao a bd
        Dim connection As New SqlConnection(strConn)
        'definir uma variavel para guardar os valores que se pretende enviar para a base de dados
        Dim valores As New SqlCommand(SQl, connection)
        valores.Parameters.Add("@Nome", SqlDbType.VarChar).Value = Nome.Text
        valores.Parameters.Add("@Servico", SqlDbType.VarChar).Value = Servico.Text
        valores.Parameters.Add("@n_mec", SqlDbType.Int).Value = n_mec.Text
        valores.Parameters.Add("@Categoria", SqlDbType.VarChar).Value = Categoria.Text
        valores.Parameters.Add("@n_selo", SqlDbType.Int).Value = n_selo.Text

        connection.Open()

        Dim x As Integer = valores.ExecuteNonQuery()

        If x < 1 Then
            MsgBox("Erro ao registar!")
        Else
            MsgBox("Registado com sucesso!")

        End If

        ' Fecha a ligação e limpa as variáveis
        connection.Close()
        connection = Nothing
        valores = Nothing
    End Sub

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
bioshock

Faz antes isto:

Sub Query1()
'caminho da base de dados
        Dim strConn As String
        strConn = WebConfigurationManager.ConnectionStrings("gesviaConnectionString").ConnectionString
        'comando de sql que se pretende, neste caso for para inserir registo
        Dim SQl As String = "INSERT INTO Principal  ([Nome],[servico],[n_mec],[Categoria],[Ano],[n_selo])Values(@nome,@servico,@n_mec,@Categoria,@n_selo);"
        'conecçao a bd
        Dim connection As New SqlConnection(strConn)
        'definir uma variavel para guardar os valores que se pretende enviar para a base de dados
        Dim valores As New SqlCommand(SQl, connection)
        valores.Parameters.Add("@Nome", SqlDbType.VarChar).Value = Nome.Text
        valores.Parameters.Add("@Servico", SqlDbType.VarChar).Value = Servico.Text
        valores.Parameters.Add("@n_mec", SqlDbType.Int).Value = n_mec.Text
        valores.Parameters.Add("@Categoria", SqlDbType.VarChar).Value = Categoria.Text
        valores.Parameters.Add("@n_selo", SqlDbType.Int).Value = n_selo.Text

        connection.Open()

        Dim x As Integer = valores.ExecuteNonQuery()

        If x < 1 Then
            MsgBox("Erro ao registar!")
        Else
            MsgBox("Registado com sucesso!")

        End If

        ' Fecha a ligação e limpa as variáveis
        connection.Close()
        connection = Nothing
        valores = Nothing
End Sub

Sub Query2()
xpto
xpto
End Sub

Metes aqui o código igual à Query1, mas alteras os campos.

Depois no button1, metes:

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
Query1()
Query2()

Desta forma fica tudo mais organizado e de melhor percepção.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
antidzrt

Muito obrigado bioshock  :)

isto agpra dame um pequeno erro na msgbox

Showing a modal dialog box or form when the application is not running in UserInteractive mode is not a valid operation. Specify the ServiceNotification or DefaultDesktopOnly style to display a notification from a service application.

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.InvalidOperationException: Showing a modal dialog box or form when the application is not running in UserInteractive mode is not a valid operation. Specify the ServiceNotification or DefaultDesktopOnly style to display a notification from a service application.

Source Error:

Line 32:            MsgBox("Erro ao registar!")

Line 33:        Else

Line 34:            MsgBox("Registado com sucesso!")

Line 35:

Line 36:        End If

Pelo que eu percebi embora teja a fazer o codigo em VB.net  em isto e aspx logo a msgbox nao dá certo?  É invisivel ao utilzador

Pesquisei mais um bocadinho e encontrei isto http://www.essentialobjects.com/Products/EOWeb/MsgBox.aspx

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
bioshock

Isso devia de funcionar, não tem nada haver com a msgbox, a não ser que tu estejas a fazer mais algum código para além dessas queries..mas só assim por via das dúvidas faz o seguinte:

Troca msgbox por "MessageBox.Show("texto") e depois mete isto:

Try
     código da query
Catch ex as exception
Messagebox.Show(ex.toString)
End try

Corre a aplicação e vê que erro é que dá.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
antidzrt

 Try


            valores.ExecuteNonQuery()

        Catch ex As Exception
            Messagebox.Show(ex.ToString)
        End Try

nao apareçe a registar

nao ta declarado ta a sublinhado

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
bioshock

Nada disso, lol.

O que eu te disse para fazeres foi:

Sub Query1()
Try
'caminho da base de dados
        Dim strConn As String
        strConn = WebConfigurationManager.ConnectionStrings("gesviaConnectionString").ConnectionString
        'comando de sql que se pretende, neste caso for para inserir registo
        Dim SQl As String = "INSERT INTO Principal  ([Nome],[servico],[n_mec],[Categoria],[Ano],[n_selo])Values(@nome,@servico,@n_mec,@Categoria,@n_selo);"
        'conecçao a bd
        Dim connection As New SqlConnection(strConn)
        'definir uma variavel para guardar os valores que se pretende enviar para a base de dados
        Dim valores As New SqlCommand(SQl, connection)
        valores.Parameters.Add("@Nome", SqlDbType.VarChar).Value = Nome.Text
        valores.Parameters.Add("@Servico", SqlDbType.VarChar).Value = Servico.Text
        valores.Parameters.Add("@n_mec", SqlDbType.Int).Value = n_mec.Text
        valores.Parameters.Add("@Categoria", SqlDbType.VarChar).Value = Categoria.Text
        valores.Parameters.Add("@n_selo", SqlDbType.Int).Value = n_selo.Text

        connection.Open()

        Dim x As Integer = valores.ExecuteNonQuery()

        If x < 1 Then
            Messagebox.Show("Erro ao registar!")
        Else
            Messagebox.Show("Registado com sucesso!")

        End If

        ' Fecha a ligação e limpa as variáveis
        connection.Close()
        connection = Nothing
        valores = Nothing
Catch ex as exception
Messagebox.Show(ex.ToString)
End try
End Sub

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
bioshock

Lol..falta-te qualquer coisa no VS, ou está mal instalado...

A messagebox não é nenhuma declaração, é uma class. Esse erro é muito estranho, não sei do que possa ser.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.