1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Update, Insert e Delete em SQL Server 2005 e VB.NET 2003

Discussão em 'Programação' iniciada por Fil__, 15 de Julho de 2008. (Respostas: 18; Visualizações: 6731)

  1. Fil__

    Fil__ Power Member

    Malta tenho o seguinte codigo no botao Gravar:
    Código:
    Dim cb As New SqlCommandBuilder(da)
            da.Update(ds, "FORNECEDOR")
    Segundo a logica o botao Apagar deveria ser:
    Código:
    Dim cb As New SqlCommandBuilder(da)
            da.Delete(ds, "FORNECEDOR")
    e o botao Inserir seria:
    Código:
    Dim cb As New SqlCommandBuilder(da)
            da.Insert(ds, "FORNECEDOR")
    O botao gravar funciona na perfeiçao mas o apagar e o inserir nao funcionam. O vb nao encontra as definiçoes Insert e Delete mas a Update funciona e eu nao defini nada. Podem ajudar?

    Este é o codigo que coloquei no form_load
    Código:
    Dim myConnectionString As String = "Data Source=HP\SQLEXPRESS;AttachDbFilename='C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\gri.mdf';Integrated Security=True"
            Dim connection As New SqlConnection(myConnectionString)
            Dim SQL As String = "SELECT * FROM Fornecedor"
            da = New SqlDataAdapter(SQL, connection)
            ds = New DataSet
            da.Fill(ds, "Fornecedor")
            Me.DataGrid1.DataSource = ds.Tables("Fornecedor")
            connection = Nothing
    
    Ja agora, aconselham esta maneira de fazer as coisas? E que nao tenho no form os sqlconnection e os sqldataadapter que usava quando fazia programas com BD em Access (em vez de sqlconnection era oledbconnection). Acham que este codigo e bom?
     
    Última edição pelo moderador: 15 de Julho de 2008
  2. AliFromCairo

    AliFromCairo Power Member

    Boas, aconselho-te a usar datasets tipificados, pois são bastante mais simples de manipular. Para além disso, tens um dataset designer no Microsoft Visual Studio que te permite criar os comandos que pretendes através de um wizard.
     
  3. Fil__

    Fil__ Power Member

    Mas como estou a utilizar datagrid assim nao funciona melhor?
    Tou mesmo perdido
     
  4. alfinete

    alfinete Power Member

    eu aconcelho a fazer a mão, pois tens mais controlo sobre um erro que posso vir a acontecer, pois se usas tipificados se algum da barraca tens de apaga-lo e voltar a fazer de novo.

    eu fasso tdo por code em vs2005 em c#, e não trabalho com acess mas sim com sqlserver 2005, sendo assim só dei a minha opinião em relação aos tipificados

    aconcelho a começares com c#

    espero que tenha ajudado
     
  5. Fil__

    Fil__ Power Member

    Agradeço alfinete mas tem de ser em VB. Ate nem tenho grandes dificuldades com VB só que tenho sido um bocado auto-didacta e como nao sei bem como fazer fico sempre na expectativa
     
  6. Fil__

    Fil__ Power Member

    Afinal o que acham melhor, fazer com o codigo que tenho ate ao momento ou usar o sqlconnection, sqldataadapter e os dataset para criar e aceder aos dados da melhor maneira possivel?
     
  7. guilherme

    guilherme Power Member

  8. Fil__

    Fil__ Power Member

    Actualmente estou com este codigo

    Form_Load
    Código:
            Dim myConnectionString As String = "Data Source=HP\SQLEXPRESS;AttachDbFilename='C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\gri.mdf';Integrated Security=True"
            Dim connection As New SqlConnection(myConnectionString)
            Dim SQL As String = "SELECT * FROM FORNECEDOR"
            SqlDataAdapter1.Fill(DsFornecedor1, "FORNECEDOR")
    
    Depois tenho o comando gravar que funciona
    Código:
            Dim cb As New SqlCommandBuilder(SqlDataAdapter1)
            SqlDataAdapter1.Update(DsFornecedor1, "FORNECEDOR")
    
    Mas os botoes apagar e novo nao funcionam com o Insert e o Delete. Podem-me ajudar? Please?
    Lembro mais uma vez que estou a usar o SQL Express Edition 2005 e o VB .NET 2003
     
  9. AliFromCairo

    AliFromCairo Power Member

    Boas, coloca o código que estás a utilizar para as outras operações se for possível.
     
  10. _freelancer_

    _freelancer_ Power Member

    Este é um problema bicudo de explicar mas vou tentar.

    O SqlDataAdapter é uma espécie de ligação entre um DataSet e a base de dados em si. Se reparares, o SqlDataAdapter tem quatro atributos idênticos: InsertCommand, DeleteCommand, UpdateCommand e SelectCommand.

    A cada um destes atributos, deves atribuir a query respectiva, tendo em atenção que eles são parametrizáveis. Contudo, não creio que seja sequer isto que queres utilizar, e digo isto porque vejo que de seguida estás a fazer um Update() com o objectivo de realmente fazer um SQL UPDATE, MAS... não é só para isso que o Update() serve. Na realidade, o método Update() serve para actualizar a(s) tua(s) tabela(s) de acordo com o DataSet que lhe estás a passar.

    Para que fique claro o que quero dizer com isto, cá vai um exemplo. Tens a tabela fornecedor:
    Código:
    fornecedor_id         |        fornecedor_nome
           5                  |            Nabos e Cia.
           7                  |            João e Costa Lda.
           9                  |            Pedro Paulo Pinto
    
    E fazes o SqlDataAdapter1.Fill tal como tens no teu código. Neste momento, tens a tabela toda no DsFornecedor1.

    Agora, imagina que alteras os dados no DsFornecedor1. Vais ao objecto e removes o fornecedor com o id 7 e mudas o nome do 9 para "Importações Carvalho". Estas mudanças não se estão a reflectir na base de dados mas o teu DataSet agora é:
    Código:
    fornecedor_id         |        fornecedor_nome
           5                  |            Nabos e Cia.
           9                  |            Importações Carvalho
    
    Contudo, agora se executasses o código que tens mais abaixo, SqlDataAdapter1.Update(...) com este DataSet, ele iria apagar a linha do fornecedor 7 da base de dados e iria fazer a actualização do nome do 9. Isto se tiveres os InsertCommand, UpdateCommand, DeleteCommand e SelectCommand configurados no SqlDataAdapter.

    Como já deves ter reparado, isto é uma trabalheira, e só dá jeito quando estás a trabalhar com uma grid onde o utilizador pode modificar as coisas visualmente (e assim modificar um DataSet) para que depois te baste a ti, em código, mandar o Adapter actualizar a tabela com base naquele DataSet. Quando queres fazer queries pontuais, coisas que são simplesmente código SQL que queres mandar para a BD, eu sugiro outra abordagem:

    Código:
    Dim cmd as New SqlCommand(SQL, myConnectionString)
    
    Depois, este SqlCommand é super poderoso. Nele tens os seguintes métodos:
    - ExecuteNonQuery -> Deve ser usado para UPDATE, INSERT e DELETE
    - ExecuteReader -> Usado para SELECT. Devolve um SqlDataReader que te vai permitir iterar pelos dados devolvidos pelo SELECT.

    Espero ter ajudado :)
     
  11. Fil__

    Fil__ Power Member

    _freelancer_ a tua explicaçao ta muita fixe. Olha, eu pretendo que o utilizador mexa na grid, ou seja, que coloque novos fornecedores, apague antigos e grave. Tem influencia na dica que deste?
     
  12. _freelancer_

    _freelancer_ Power Member

    Nesse caso então continua a usar o SqlDataAdapter pois assim consegues fazer logo com que as alterações ao DataSet da Grid se reflictam na base de dados. Eu até ajudava mais, mas já lá vão uns meses desde a última vez que trabalhei com isto, portanto aconselho que leias isto:

    http://support.microsoft.com/kb/308055

    Penso que o teu objectivo principal agora será o de definir os Insert, Delete e UpdateCommands do SqlDataAdapter, para que ele saiba como fazer as alterações na base de dados.

    Tem excertos de código, comentados e tudo. Penso que te pode ajudar. Se ainda assim tiveres dúvidas, diz alguma coisa e logo se vê o que se pode arranjar. :)
     
  13. Fil__

    Fil__ Power Member

    Thanks _freelancer_
     
  14. Fil__

    Fil__ Power Member

    Eu tou com a impressao que o maior problema esta no definir o comando insert, update e delete. E que ele faz o comando select na boa porque esta definido no form load. Acho eu que é isso. So que como faço isso? E o meu problem penso eu
     
  15. Fil__

    Fil__ Power Member

    Entao? Ninguem me pode ajudar? Tou mesmo sem saber o que fazer, ja me fartei de procurar e nao encontro um tutorial que explique passo a passo como fazer o que quero. Ajudem, PLEASE!!!
     
  16. _freelancer_

    _freelancer_ Power Member

    Tens de ter calma, as pessoas ajudam mas também não estão aqui sempre em cima do acontecimento :P

    Acabei de fazer isto, vê se te ajuda.
     
  17. Fil__

    Fil__ Power Member

    Mas o problema é que eu estou a usar o vb .net 2003, e as coisas sao diferentes. Existem funcionalidades do 2008 que nao existem no 2003 (funcionalidades que facilitam a tarefa). Thanks pela ajuda que tens dado _freelancer_
     
  18. _freelancer_

    _freelancer_ Power Member

    Então nesse caso não te posso ajudar :( eu não tenho o VS .NET 2003, apenas o 2008 (tenho o 2005 mas não o tenho instalado).
     
  19. Jekkaman

    Jekkaman Power Member


    Não percebo o que se passa comigo,quando tento aceder a um ficheiro sql no meu disco dá sempre este erro...

    "An error has occurred while establishing a connection to the server. When connecting to SQL Server 2005, this failure may be caused by the fact that under the default settings SQL Server does not allow remote connections. (provider: SQL Network Interfaces, error: 26 - Error Locating Server/Instance Specified)"

    Código:
    Dim cnnstr As String = "Data Source=E:\My Files\Documents\Visual Studio 2008\Projects\SqlStudy\SqlStudy\Database1.sdf"
            Dim sqlcnnstr As New SqlClient.SqlConnection(cnnstr)
    Será que me falta algo?


    Edit: Esqueçam ... bastava usar o sqlclientce e já funciona..
     
    Última edição: 23 de Julho de 2008

Partilhar esta Página