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

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:
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.
 
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
 
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
 
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?
 
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
 
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 :)
 
_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?
 
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. :)
 
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
 
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!!!
 
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_
 
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).


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:
Back
Topo