Array
(
)

Insert no cSharp asp.net

Regis
   - 07 jun 2013

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)

Pjava
   - 08 jun 2013

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;
}
}

Regis
   - 08 jun 2013

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 ?

Regis
   - 10 jun 2013

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

Joel Rodrigues
   - 10 jun 2013

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:
#Código

Cliente cli = new Cliente();
cli.Id = Conerto.ToInt32(txtID.Text);
cli.Nome = txtNome.Text;
clu.Inserir();

Regis
   - 10 jun 2013

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 ;

Joel Rodrigues
   - 10 jun 2013

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

Regis
   - 10 jun 2013

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

Regis
   - 10 jun 2013

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()
{

}
}

Joel Rodrigues
   - 10 jun 2013

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

Regis
   - 10 jun 2013

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.

Regis
   - 10 jun 2013

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 .

José
   - 18 set 2013

Olá amigo Regis, conseguiu solucionar sua duvida ?