Insert no cSharp asp.net

07/06/2013

0

Olá galera
agradeço desde já.

Estou tentando inserir dados em uma tabela aparentemente simples , mas sempre esta dando um erro dizendo que estou tentando inserir um campo string em um numérico.
Eu formatei todos os campos double.parse para os doubles e int.parse para int

abaixo o código


C = int.Parse(drpCliente.SelectedValue);
P = int.Parse(drpListaProduto.SelectedValue);
Q = int.Parse(txtQuantidade.Text);

V = double.Parse(txtValorUnidade.Text);
D = double.Parse(txtDesconto.Text);
T = double.Parse(txtSubtotal.Text);



string conexao = @"Data Source=caminho do meu banco mais usuario e senhas do sqlserver
SqlConnection con = new SqlConnection(conexao);
SqlCommand cmd = new SqlCommand("insert into tb_vendas (Id_cliente,id_produto,Qt_Items,Vl_item,Vl_Desconto) values ('"
+ C
+ "','" + P
+ "','" + Q
+ "','" + V
+ "','" + D
+ "')", con);
con.Open();
cmd.ExecuteNonQuery();
con.Close();
Response.Write("<script>alert ('Cadastro Realizado com sucesso !');</script>");


antes de usar as variaveis eu estava passando os textbox normalmente no insert into int.parse(txtquantidade.text)
Carlos Faria

Carlos Faria

Responder

Posts

08/06/2013

Pjava

Cara, use parametros para inserir. Leia sobre injeção de sql e verá que da forma como você colocou não é uma boa prática, um blue print. Veja um método que fiz para persistência em BD.

public void insereTriagem(Int32 idrecurso, Int32 tipoDoc, string numDoc, Int32 ramo, string obrigacao, string nm_autor, string cpfAutor,
string observacao,DateTime dtcadastro, string tarefa, DateTime dtprazo, string nmArea, string outroDoc)
{
try
{
conexao.ConnectionString = ConfigurationManager.ConnectionStrings["connJuridico"].ConnectionString;
conexao.Open();

string sql = "insert into tbl_Triagem (id_recurso,id_tipo_documento,num_doc,id_ramo,obrigacao,nm_autor,cpf_autor,obs,dt_cadastro,tarefa,dt_prazo_tarefa,nm_area,outro_tipo_doc) values " +
"(@recurso,@tipo_doc,@numdoc,@idramo,@obrigacao,@nomeautor,@cpfautor,@observacao,@dtcadastro,@tarefa,@dtprazotarefa,@nmarea,@outrotipodoc)";

cmd.CommandText = sql;
cmd.Connection = conexao;
cmd.Parameters.AddWithValue("recurso", idrecurso);
cmd.Parameters.AddWithValue("tipo_doc", tipoDoc);
cmd.Parameters.AddWithValue("numdoc", numDoc);
cmd.Parameters.AddWithValue("idramo", ramo);
cmd.Parameters.AddWithValue("obrigacao", obrigacao);
cmd.Parameters.AddWithValue("nomeautor", nm_autor.Trim());
cmd.Parameters.AddWithValue("cpfautor", cpfAutor);
cmd.Parameters.AddWithValue("observacao", observacao);
cmd.Parameters.AddWithValue("dtcadastro", dtcadastro);
cmd.Parameters.AddWithValue("tarefa", tarefa);
cmd.Parameters.AddWithValue("dtprazotarefa", dtprazo);
cmd.Parameters.AddWithValue("nmarea", nmArea.Trim());
cmd.Parameters.AddWithValue("outrotipodoc", outroDoc);

cmd.ExecuteNonQuery();
}
finally
{
cmd.Dispose();
cmd = null;
conexao.Close();
conexao = null;
}
}
Responder

08/06/2013

Carlos Faria

Boa ideia
Mas seria mais fácil eu ter a procure insert tb no sqlserver e já passar direto , vc teria um exemplo de como fazer isso ?
Responder

09/06/2013

Joel Rodrigues

Veja este artigo: [url]http://www.linhadecodigo.com.br/artigo/3428/crud-usando-stored-procedures-e-csharp.aspx[/url]
Responder

10/06/2013

Carlos Faria

perfeito só me diz la no webform como eu jogo eu passa isso para a classe

me mostra um exemplo de dois campos somente

id int
nome varchar
Responder

10/06/2013

Joel Rodrigues

Bom, supondo que você já tenha os controles no webform e esteja querendo cadastrar o cliente ao clicar em um botão, no evento Click deste você poderia fazer algo da seguinte forma:
Cliente cli = new Cliente();
cli.Id = Conerto.ToInt32(txtID.Text);
cli.Nome = txtNome.Text;
clu.Inserir();
Responder

10/06/2013

Carlos Faria

Olá amigo

Código do form

cliente ins = new cliente();

ins.Nome = txtNome.Text;
ins.Telefone = txtTelefone.Text;
ins.Email = txtMail.Text;
ins.Inserir();


//Aqui o fonte da classe
public void Inserir()
{
comando.CommandText = "INSERIR_CLIENTES";
comando.Parameters.Clear();
SqlParameter parcodigo = new SqlParameter("CODIGO", SqlDbType.Int);
parcodigo.Direction = ParameterDirection.Output;
comando.Parameters.AddWithValue("NOME", this.nome);
comando.Parameters.AddWithValue("TELEFONE", this.telefone);
comando.Parameters.AddWithValue("EMAIL", this.email);

try
{
_conexao.Open();
comando.ExecuteNonQuery();
this.codigo = Convert.ToInt32(parcodigo.Value);
//Após executar o comando, recuperamos o valor do parâmetro @CODIGO
_conexao.Close();
}
catch (SqlException ex)
{

throw new Exception(ex.Message);
}

}

ao debugar eu cheguei no seguinte erro

Object reference not set to an instance of an object.


o debug para no try
conexao.open ;
Responder

10/06/2013

Joel Rodrigues

Observe que a variável _conexao não foi instanciada. Você precisa cria-la antes de usar, informando a ConnectionString.
Responder

10/06/2013

Carlos Faria

essa variável está na classe pelo que entendi ela deveria abrir sozinha a conexão todas as vezes que ouve-se um insert.

Esse é o codigo do botaoinserir do form

cliente ins = new cliente();

ins.Codigo = int.Parse(txtcodigo.Text);
ins.Nome = txtNome.Text;
ins.Telefone = txtTelefone.Text;
ins.Email = txtMail.Text;
ins.Conexao.Open();
ins.Inserir();
ins.Conexao.Close();


Eu tentei de tudo cara não consegui solucionar

Responder

10/06/2013

Carlos Faria

Aqui está todo o fonte da classe


using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data;
using System.Data.SqlClient;


public class cliente
{

#region String de conexao com banco de dados
private string _str_Caminho = @"Data Source=meubanco;Initial Catalog=db_visual_studio;Persist Security Info=True;User ID=marco_tulio;Password=senha";
private SqlConnection _ObjCon;
private SqlCommand comando = new SqlCommand();


public string abreConecao()
{

this._ObjCon = new SqlConnection(_str_Caminho);
string retornoCnn;
try
{
this._ObjCon.Open();
retornoCnn = "Ok ";
}
catch (Exception e)
{

throw new Exception(e.Message);
}
finally
{
this._ObjCon.Close();
}

return retornoCnn;


}
#endregion

#region Gets and Sets
private int codigo;
private string nome;
private string telefone;
private string email;



public int Codigo
{
get { return codigo; }
set { codigo = value; }
}

public string Nome
{
get { return nome; }
set { nome = value; }
}

public string Telefone
{
get { return telefone; }
set { telefone = value; }
}

public string Email
{
get { return email; }
set { email = value; }
}

#endregion

public void Inserir()
{
comando.CommandText = "INSERIR_CLIENTES";
comando.Parameters.Clear();
SqlParameter parcodigo = new SqlParameter("CODIGO", SqlDbType.Int);
parcodigo.Direction = ParameterDirection.Output;
comando.Parameters.AddWithValue("NOME", this.nome);
comando.Parameters.AddWithValue("TELEFONE", this.telefone);
comando.Parameters.AddWithValue("EMAIL", this.email);

try
{
_ObjCon.Open();
comando.ExecuteNonQuery();
this.codigo = Convert.ToInt32(parcodigo.Value);
//Após executar o comando, recuperamos o valor do parâmetro @CODIGO
_ObjCon.Close();
}
catch (SqlException ex)
{

throw new Exception(ex.Message);
}

}
//metodo alterar da classe cliente

public void Alterar()
{
comando.CommandText = "ALTERAR_CLIENTES";
comando.Parameters.Clear();
comando.Parameters.AddWithValue("CODIGO", this.codigo);
comando.Parameters.AddWithValue("NOME", this.nome);
comando.Parameters.AddWithValue("TELEFONE", this.telefone);
comando.Parameters.AddWithValue("EMAIL", this.email);

try
{
_ObjCon.Open();
comando.ExecuteNonQuery();
_ObjCon.Close();
}
catch (SqlException ex)
{
throw new Exception(ex.Message);
}
}


/*
//Metodo excluir da classe cliente
public static void Excluir()
{
comando.CommandText = "EXCLUIR_CLIENTES";
comando.Parameters.Clear();
comando.Parameters.AddWithValue("CODIGO", this.codigo);
try
{
conexao.Open();
comando.ExecuteNonQuery();
conexao.Close();
}
catch(SqlException ex)
{
throw new Exception(ex.Message);
}
}

//Método Consultar da classe clinte
public static List<cliente> Consultar(int tipo, string valor)
{
comando.CommandText = "CONSULTAR_CLIENTE";
comando.Parameters.Clear();
comando.Parameters.AddWithValue("TIPO", tipo);
comando.Parameters.AddWithValue("VALOR", valor);

List<Cliente> resultado = new List<Cliente>();
try
{
conexao.Open();
SqlDataReader reader = comando.ExecuteReader();
if(reader.HasRows)
{
while(reader.Read())
{
Cliente cli = new Cliente()
{
Codigo = Convert.ToInt32(reader["CODIGO"]),
Nome = reader["NOME"].ToString(),
Telefone = reader["TELEFONE"].ToString(),
Email = reader["EMAIL"].ToString()
}

}
}
conexao.Close();
}
return resultado;
}

*/

public cliente()
{

}
}
Responder

10/06/2013

Joel Rodrigues

No método Inserir, chame a função abreConecao(). Antes de qualquer outra coisa.
Responder

10/06/2013

Carlos Faria

Não deu ainda


//codigo da classe

public void Inserir()
{
abreConecao(); //--Como voce sugeriu
comando.CommandText = "INSERIR_CLIENTES";
comando.Parameters.Clear();
SqlParameter parcodigo = new SqlParameter("CODIGO", SqlDbType.Int);
parcodigo.Direction = ParameterDirection.Output;
comando.Parameters.AddWithValue("NOME", this.nome);
comando.Parameters.AddWithValue("TELEFONE", this.telefone);
comando.Parameters.AddWithValue("EMAIL", this.email);
_ObjCon.Close();
try
{
_ObjCon.Open();
comando.ExecuteNonQuery();
this.codigo = Convert.ToInt32(parcodigo.Value);
//Após executar o comando, recuperamos o valor do parâmetro @CODIGO
_ObjCon.Close();
}
catch (SqlException ex)
{

throw new Exception(ex.Message);
}

}

codigo do form


cliente ins = new cliente();
ins.Codigo = int.Parse(txtcodigo.Text);
ins.Nome = txtNome.Text;
ins.Telefone = txtTelefone.Text;
ins.Email = txtMail.Text;

ins.Inserir();


o debug para
commando.executeNomQuery() e informa esse erro ExecuteNonQuery: Connection property has not been initialized.
Responder

10/06/2013

Carlos Faria

Amigo peço ate desculpas pela ignorância mas eu preciso muito aprender a fazer esses métodos insert , update e delete para mim e a base de todo o projeto que vou iniciar .
Responder

18/09/2013

José

Olá amigo Regis, conseguiu solucionar sua duvida ?
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar