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

claudia2

Guardar dados c# em sql server

20 mensagens neste tópico

Olá

tenho um programa em c# aonde tenho de guardar os dados dos clientes no sql server.

Nao faço a minima ideia do codigo que tenho de usar. :wallbash:

Se alguém me poder ajudar...

Obrigado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Olá,

aqui fica um trecho de código com o exemplo de um insert.

try{
...
string connectionString = "...";
SqlConnection conn = new SqlConnection(connectionString);

SqlCommand cmd = new SqlCommand("INSERT INTO Tabela (id,nome) VALUES (@id,@nome);", conn);
cmd.Parameters.AddWithValue("@id", valor do parâmetro id);
cmd.Parameters.AddWithValue("@nome", valor do parâmetro nome);
conn.Open();

        cmd.ExecuteNonQuery();
}
catch (SqlException ex)
{
Console.WriteLine(ex.Message);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
finally
{
if (conn.State == System.Data.ConnectionState.Open)
	conn.Close();
}

Para fazeres consultas é muito semelhante mas usas o ExecuteReader(), que te devolve um SqlReader onde terás acesso aos dados através do seguinte código:

while (reader.Read())
{

	//Obter os dados
	int id= reader.GetInt32(0); // 0 = 1ª coluna do resultado
	string nome = reader.GetString(1); // 1 = 2ª coluna
	etc...
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Bem só agora é que reparei que o código esta em consola :D

Tive poucas aulas sobre c# e sql server e os apontamentos que tenho nao me estao a ajudar muito.

Se me poderes orientar agradeço muito pois o prazo de entrega já se esta a aproximar e ainda nao consigo guardar os dados dos clientes :confused:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Viva,

No exemplo que te apresentei apenas estou a enviar para a consola as excepções. Não te aconselho a apresentares a excepção ao utilizador, porque isso vai contra os princípios de iteração com o utilizador, as mensagens devem ser claras e preceptiveis.

Podes colocar o código que te apresentei numa classe que poderás instanciar num formulário.

Por exemplo, numa situação em que tens de registar clientes numa bd. Crias uma classe dedicada apenas às operações na bd referentes aos clientes.

Nessa classe podes criar o método:

public bool RegistarCliente(Cliente cliente)
{
try{
   string connectionString = Aqui colocas a tua connection string para a bd
   SqlConnection conn = new SqlConnection(connectionString);
   
   SqlCommand cmd = new SqlCommand("INSERT INTO t_cliente (id,nome,morada,telefone) VALUES (@id,@nome,@morada,@telefone);", conn);
   cmd.Parameters.AddWithValue("@id", cliente.id);
   cmd.Parameters.AddWithValue("@nome", cliente.nome);
   cmd.Parameters.AddWithValue("@morada", cliente.morada);
   cmd.Parameters.AddWithValue("@telefone", cliente.telefone);
   conn.Open();
   
  cmd.ExecuteNonQuery();
  return true;
}
catch (SqlException ex)
{
   Console.WriteLine(ex.Message);
   return false;
}
catch (Exception ex)
{
   Console.WriteLine(ex.Message);
   return false;
}
finally
{
   if (conn.State == System.Data.ConnectionState.Open)
      conn.Close();
}
}

No teu form poderás instaciar a classe e chamar o método, por exemplo:

ClienteBD trataBDCliente = new ClienteBD();
trataBDCliente.RegistarCliente(cliente);

Se te estiver a dar algum erro em particular, o melhor é colocares o erro ou excepção que te está a dar. Assim será mais fácil para nós ajudar-te  :D.

Cumprimentos

PS: Caso não saibas como criar a connection string para acederes à bd aqui fica um exemplo da estrutura da connection string:

SqlConnection myConnection = new SqlConnection("user id=username;" + 
                                       "password=password;server=serverurl;" + 
                                       "Trusted_Connection=yes;" + 
                                       "database=database; " + 
                                       "connection timeout=30");

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Olá...

Muito obrigado. Vou experimentar o código para ver se dá.

ès muito fiche  :D

Obrigado mais uma vez

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Já consegui resolver :)

Mal possa posto o codigo pode ser que ajude alguem  :)

Muito obrigado mais uma vez

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Olá

tenho um programa em c# aonde tenho de editar os dados dos clientes no sql server.

Nao faço a minima ideia do codigo que tenho de usar. :wallbash:

Se alguém me poder ajudar...

Obrigado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O código é em quase tudo semelhante ao de fazeres um insert, no entanto a query será um update.

Tipo isto:

...
   string connectionString = Aqui colocas a tua connection string para a bd
   SqlConnection conn = new SqlConnection(connectionString);
   
   SqlCommand cmd = new SqlCommand("UPDATE t_cliente set nome=@nome, morada=@morada, telefone=@telefone WHERE id=@id;", conn);
   cmd.Parameters.AddWithValue("@id", cliente.id);
   cmd.Parameters.AddWithValue("@nome", cliente.nome);
   cmd.Parameters.AddWithValue("@morada", cliente.morada);
   cmd.Parameters.AddWithValue("@telefone", cliente.telefone);
   conn.Open();
   
  cmd.ExecuteNonQuery();
...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Obrigada... :)

Peço desculpa mas tem sido impossivel passar por aqui!

Já agora aproveito para perguntar, com o delete vai s passar o mesmo?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Para fazeres um select em vez de utilizares o ExecuteNonQuery() utilizas o ExecuteReader(), assim por exemplo:

SqlDataReader reader = cmd.ExecuteReader();

if(reader.HasRows)
{
    While(reader.Read())
    {
          Cliente.Nome = reader.GetString("nome");
          Cliente.DataNascimento = reader.GetDateTime("dataNasc");
          ...
     }
}

Ou então podes usar uma DataTable, e fazes assim:

            DataSet ds = new DataSet();
            SqlConnection conn = null;
            try
            {
                conn = new SqlConnection(connectionString);
                conn.Open();

                SqlCommand cmd = new SqlCommand("SELECT * FROM t_cliente, conn);

                // cria o adapter e preenche o dataset
                SqlDataAdapter adapter = new SqlDataAdapter(cmd);
                adapter.Fill(ds);

                DataTable dt = ds.Tables[0];
                return dt;
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                return null;
            }
            finally
            {
                if (conn.State == System.Data.ConnectionState.Open)
                    conn.Close();
            }

Para acederes à informação na DataTable é simples, fazes assim:

dt.Rows[idx_linha][idx_coluna].ToString();

ou então

dt.Rows[idx_linha]["nome do campo"].ToString();

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ainda não tive muito tempo para poder experimentar mas mal consiga digo algo.

Obrigada  :(

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ainda não tive muito tempo para poder experimentar mas mal consiga digo algo.

Obrigada  :P

Ela mandou agradecer :(

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tenho uma tabela de clientes  e tenho isto numa query:

INSERT INTO clientes Values (001,'maria','ehehe, 37B',222222222,911111111,'lala@hotmail.com',214578965)

mas dá erro:

Msg 213, Level 16, State 1, Line 1

Insert Error: Column name or number of supplied values does not match table definition.

alguem me pode ajudar?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ele está se a queixar que o número de dados que estás a inserir é diferente do número de colunas que a tabela clientes tem.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Já resolvi... faltava-me o código postal :wallbash:

Mas obrigada na mesma

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

ahaha :buck2:

Não tens vergonha?? a aproveitares-te de mim para fazeres isso  :thumbdown:

0

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