Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

antidzrt

Database Insert

Recommended Posts

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

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other sites
antidzrt

sim tou

Não dá pa fazer debug o ficheiro web.config não deixa

mas faço Crtl+ f5 nao é a mesma coisa?

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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"

Share this post


Link to post
Share on other 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"

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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á.

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other sites
antidzrt

Tenho de ver isso mas obrigado o meu programa ja regista quase 100%

tank you bioshock

Share this post


Link to post
Share on other sites
antidzrt

Fiz porcaria.

Não sei o que fiz mas agora nao regista

Edit: eskeçe ja funciona, já descobri o erro

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.