Ir para o conteúdo
Etiqueta

Alterar dataset

Mensagens Recomendadas

Etiqueta    0
Etiqueta

Boa tarde estou a tentar editar os dados das linhas do dataset e em vez de alterar, está a criar uma nova linha.

fica aqui o meu código

public void AlterarMorada()
        {
            DataRow _linhaNovaMorada = dSMorada.DB1_Morada.NewRow();
            _linhaNovaMorada.BeginEdit();
            _linhaNovaMorada["Descricao"] = descricaoTextBox.Text;
            _linhaNovaMorada["Morada"] = moradaTextBox.Text;
            _linhaNovaMorada["Localidade"] = localidadeTextBox.Text;
            _linhaNovaMorada["CodPostal"] = codPostalMaskedTextBox.Text;
            _linhaNovaMorada["Km"] = kmTextBox.Text;
            _linhaNovaMorada["ID_UAKm"] = uAKMComboBox.SelectedValue;
            _linhaNovaMorada["GPSL"] = gPSLTextBox.Text;
            _linhaNovaMorada["GPSX"] = gPSXTextBox.Text;

            _linhaNovaMorada.EndEdit();
            tableAdapterManager2.UpdateAll(dSMorada);
            MessageBox.Show("Dados da morada alterados com êxito!", "Mensagem", MessageBoxButtons.OK);
        }

Alguém consegue dar-me uma ajudinha sff?

Desde já, obrigada

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Etiqueta    0
Etiqueta

Bom dia,

agarrei no código que está na outra página e adaptei para c#. ficou assim:

string connString = @"Data Source=*****;Initial Catalog=****;User ID=sa;Password=*****";
            string query = "INSERT INTO DB1_Morada([Descricao], [Morada]) VALUES (@Descricao, @Morada)";

            SqlConnection conn = new SqlConnection(connString);

            SqlCommand command = new SqlCommand(query, connString);

            command.Parameters.Add("@Descricao", Type.VarChar).Value = descricaoTextBox.Text;
            command.Parameters.Add("@Morada", Type.VarChar).Value = moradaTextBox.Text;

            conn.Open();

            int x = command.ExecuteNonQuery();

            if (x < 1)
                MessageBox.Show("Erro ao inserir", "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Error);
            else
                MessageBox.Show("Registo inserido com sucesso!", "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Information);

            conn.Close();
            command = null;

mas exsitem alguns erros.

1) nos dois

Type.VarChar

como é que fica em c#?

2) nesta parte

new SqlCommand(query, connString);

, o erro é "Argument 2: cannot convert from 'string' to 'Sytem.Data.SqlClient.SqlConnection'"

3) Na mesma linha

new SqlCommand(query, connString);

surge um outro erro. "The best overloaded method match for 'Sytem.Data.SqlClient.SqlCommand.SqlCommand(string,System.Data.SqlClient.SqlConnection)' has some invalid arguments"

Alguém me consegue ajudar, sff?

Desde já o meu muito obrigada

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Etiqueta    0
Etiqueta

Já consegui resolver alguns problemas.

o código está assim:

SqlConnection connString = new SqlConnection(@"Data Source=******;Initial Catalog=****;User ID=sa;Password=*****");
            string query = "INSERT INTO DB1_Morada([Descricao], [Morada]) VALUES (@Descricao, @Morada)";

            //SqlConnection conn = new SqlConnection(connString);

            SqlCommand command = new SqlCommand(query, connString);

            command.Parameters.Add("@Descricao", Type.VarChar).Value = descricaoTextBox.Text;
            command.Parameters.Add("@Morada", Type.VarChar).Value = moradaTextBox.Text;

            connString.Open();

            int x = command.ExecuteNonQuery();

            if (x < 1)
                MessageBox.Show("Erro ao inserir", "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Error);
            else
                MessageBox.Show("Registo inserido com sucesso!", "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Information);

            connString.Close();
            command = null;

Continuo é com os erros do

Type.VarChar

Obrigada pela ajuda

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
pmg    102
pmg

Tu tens

INSERT INTO ...

que é a instrução usada para inserir linhas numa tabela.

Para alterar uma linha existente precisas de

UPDATE ...

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Etiqueta    0
Etiqueta

Neste momento tenho assim

string query = "UPDATE DB1_Morada SET ([Descricao]=@Descricao, [Morada]=@Morada)";

e continua a adicionar em vez de alterar...

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Caça    24
Caça

Tenta assim

string query = "UPDATE DB1_Morada SET [Descricao]=@Descricao, [Morada]=@Morada";

mas deves de filtrar por qualquer coisa senão vai actualizar os registos todos, tens de colocar tambem algo como

string query = "UPDATE DB1_Morada SET [Descricao]=@Descricao, [Morada]=@Morada WHERE ID = @ID";

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Etiqueta    0
Etiqueta

Caça o primeiro código que me deste alterou todos os registos. Já altera  :cheesygrin:

Mas eu queria fazer algo como o segundo exemplo que deste, queria, mas tenho um problema.

Tenho o campo ID_Morada na base de dados mas não o uso na form, por isso não estou a conseguir...

Obrigada pela ajuda

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
pmg    102
pmg

string query = "UPDATE DB1_Morada SET ([Descricao]=@Descricao, [Morada]=@Morada)";

string query = "UPDATE DB1_Morada SET [Descricao]=@Descricao, [Morada]=@Morada";

Já altera  :cheesygrin:

Xiii ... o efeito duns parentesis!!

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Caça    24
Caça

Eu tinha-te avisado.. Deves colocar um filtro como está na segunda query que indiquei, só tens de adaptar de maniera que só actualize o registo que pretendes. O mais correcto é fazelo através do campo que é chave primaria.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
hsimoes    0
hsimoes

Olá,

em traços gerais tens de fazer o seguinte:

1. criar o dataset

2. carregar o dataset através de um dataadapter (se utilizares um typeddataset vem logo agregado), utilizando o método Fill do dataadapter.

3. escolher a linha do dataset, ou seja, vais ter um objecto datarow, que é escolhido a partir da datatable. Podes fazer isso com o método select.

Ex:

 DataRow[] moradas =  ds.Tables["Tabela"].Select("idMorada = '" + idMorada + "'");
moradas[0]["Localidade"] = "Lisboa";
moradas[0].EndEdit();

4. Actualizas a base de dados com o dataset, utilizando novamente o comando Update do dataadapter.

Outras considerações:

tem em mente que um dataset é um conjunto de datatables e por sua vez de datarows. Isto básicamente pode ser visto como uma reprodução em memória do que tens na base de dados. O dataset marca as linhas de cada tabela como Novas, alteradas e eliminadas, e quando fazes update simplesmente vai actualizar a base de dados com base nas operações que fizes-te no dataset. Como no teu caso estás sempre a adicionar uma linha, é isso que ele replica para a base de dados.

Outra sugestão é que passes para o form o id da morada, se o pretendes gravar dentro desse mesmo form.

Bom trabalho!

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Etiqueta    0
Etiqueta

Eu tinha-te avisado.. Deves colocar um filtro como está na segunda query que indiquei, só tens de adaptar de maniera que só actualize o registo que pretendes. O mais correcto é fazelo através do campo que é chave primaria.

a chave é o ID_Morada, que não estou a utilizar no form e dá erro por isso mesmo. A empresa para a qual estou a desenvolver esta aplicação não pretende que este ID_Morada seja visivel na form.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Etiqueta    0
Etiqueta

hsimoes era mais ou menos esse o meu raciocinio no inicio.

Tinha isto:

DataRow _linhaNovaMorada = dSMorada.DB1_Morada.NewRow();
            _linhaNovaMorada.BeginEdit();
            _linhaNovaMorada["Descricao"] = descricaoTextBox.Text;
            _linhaNovaMorada["Morada"] = moradaTextBox.Text;
            _linhaNovaMorada["Localidade"] = localidadeTextBox.Text;
            _linhaNovaMorada["CodPostal"] = codPostalMaskedTextBox.Text;
            _linhaNovaMorada["Km"] = kmTextBox.Text;
            _linhaNovaMorada["ID_UAKm"] = uAKMComboBox.SelectedValue;
            _linhaNovaMorada["GPSL"] = gPSLTextBox.Text;
            _linhaNovaMorada["GPSX"] = gPSXTextBox.Text;

            _linhaNovaMorada.EndEdit();
            tableAdapterManager2.UpdateAll(dSMorada);
            MessageBox.Show("Dados da morada alterados com êxito!", "Mensagem", MessageBoxButtons.OK);

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
hsimoes    0
hsimoes

O teu raciocinio inicial não estava mal, só não executas-te bem, pois, como dei no meu pequeno exemplo, tens de carregar o dataset a partir da base de dados, e não adicionar a linha ao mesmo, como fazes.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Etiqueta    0
Etiqueta

ja está resolvido.

pus o ID_Morada na form e pus nas propriedades visivle = false.

Consegui como o Caça sugeriu.

ficou assim:

SqlConnection connString = new SqlConnection(@"Data Source=*****;Initial Catalog=*****;User ID=sa;Password=*****");
            string query = "UPDATE DB1_Morada SET [Descricao]=@Descricao, [Morada]=@Morada, [Localidade]=@Localidade, [CodPostal]=@CodPostal, [Km]=@Km, [iD_UAKm]=@ID_UAKm, [GPSL]=@GPSL, [GPSX]=@GPSX WHERE [iD_Morada]=@ID_Morada"; 

            SqlCommand command = new SqlCommand(query, connString);

            command.Parameters.Add("@ID_Morada", SqlDbType.Int).Value = iD_MoradaTextBox.Text;
            command.Parameters.Add("@Descricao", SqlDbType.Char).Value = descricaoTextBox.Text;
            command.Parameters.Add("@Morada", SqlDbType.Char).Value = moradaTextBox.Text;
            command.Parameters.Add("@Localidade", SqlDbType.Char).Value = localidadeTextBox.Text;
            command.Parameters.Add("@CodPostal", SqlDbType.Char).Value = codPostalMaskedTextBox.Text;
            command.Parameters.Add("@Km", SqlDbType.Char).Value = kmTextBox.Text;
            command.Parameters.Add("@ID_UAKm", SqlDbType.Int).Value = uAKMComboBox.SelectedValue;
            command.Parameters.Add("@GPSL", SqlDbType.Char).Value = gPSLTextBox.Text;
            command.Parameters.Add("@GPSX", SqlDbType.Char).Value = gPSXTextBox.Text;

            connString.Open();

            int x = command.ExecuteNonQuery();

            if (x < 1)
                MessageBox.Show("Erro ao alterar!", "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Error);
            else
                MessageBox.Show("Dados da morada alterados com sucesso!", "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Information);

            connString.Close();
            command = null;

Obrigada a todos pela ajuda.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
bioshock    170
bioshock

Já resolvi.

Em vb é

OleDbType.VarChar

Em c# é:

SqlDbType.Char

Obrigada

Errado.

OleDb = Access

SqlDb = SQL

É igual em ambas as linguagens.

Partilhar esta mensagem


Link 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