Array
(
)

Erro de inserção no Banco de Dados!

Cassio Lopes
   - 08 jun 2013

Olá,
Estou seguindo os vídeos do seguinte curso:
http://www.devmedia.com.br/curso/sistema-de-vendas-com-asp-net-e-c-em-camadas/288
Após seguir os passos dos primeiros vídeos, travei no vídeo 4, na hora de inserir no banco, acredito que fiz tudo conforme o vídeo, porém não consigo salvar no banco, fiz o breakpoint, e meu erro acontece justamente no momento da foto abaixo:
https://lh6.googleusercontent.com/-9FlsFmR5Nxg/UbNB3eOLatI/AAAAAAAAEL0/l99bMCwgdu8/w649-h387-no/ErroC%2523.PNG
O erro captado é esse:
#Código

System.Data.SqlClient.SqlException was caught
  HResult=-2146232060
  Message=Must declare the scalar variable "@pCNPJ".
  Source=.Net SqlClient Data Provider
  ErrorCode=-2146232060
  Class=15
  LineNumber=1
  Number=137
  Procedure=""
  Server=(LocalDB)\v11.0
  State=2
  StackTrace:
       em System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
       em System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
       em System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
       em System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)
       em System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)
       em System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite)
       em System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean asyncWrite)
       em System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource`1 completion, String methodName, Boolean sendToPipe, Int32 timeout, Boolean asyncWrite)
       em System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
       em Model.ConnectionManager.executarComando(String p_strSql, List`1 p_obParams) na c:\Raiz\csharp\Vendas\Vendas\Model\ConnectionManager.cs:linha 92
  InnerException: 

Fiz upload do meu código no MediaFire... pelo jeito é algo com o CPF, já adianto que não fiz a validação do CPF conforme o autor do vídeo pede, mas nas regras de negócio, pedi apenas para não aceitar CPF nulos, não coloquei validação, então não estou entendendo o porque desse erro.
Vale ressaltar também, que fiz algumas inserções manuais no banco, e a parte de consulta está funcionando corretamente, só a inserção que me volta esse erro.
Se alguém puder me dar uma luz agradeço!
Segue o link do código:
http://www.mediafire.com/?pv5mv5o05ymfcf6

Pjava
   - 08 jun 2013

Faço esse código para inserir e dá certo:

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

0
|
0

Cassio Lopes
   - 08 jun 2013

Valeu pelo apoio, mas com esse código, teria que mudar toda a lógica das outras classes, View, Model e Controller, vou aguardar para ver se alguém tem outra solução!

Abraços e obrigado!

0
|
0

Pjava
   - 08 jun 2013

Uma outra forma seria assim:

public void InsereTipoDocumento(string nm_tipo_doc)
{
using (WFJuridicoEntities wfj = new WFJuridicoEntities())
{
try
{
tbl_Tipo_Documento tpd = new tbl_Tipo_Documento();
tpd.nm_tipo_documento = nm_tipo_doc.Trim();

wfj.tbl_Tipo_Documento.AddObject(tpd);
wfj.SaveChanges();
}
catch(Exception e)
{
Erro = "Erro na gravação do registro: " + e.Message;
}
}
}

0
|
0

Joel Rodrigues
   - 10 jun 2013

O problema aí é que você está usando a variável @pCNPJ no SQL Server sem declará-la. Se for um parâmetro, você esqueceu de declará-lo.

0
|
0

Cassio Lopes
   - 10 jun 2013

Obrigado amigo, hoje a noite ou amanhã pela manhã devo retornar nessa atividade e vou verificar sua dica, posto aqui o resultado!

Grande abraço!

0
|
0

Cassio Lopes
   - 13 jun 2013

Olá, hoje tive tempo de voltar ao batente, consegui encontrar o erro, no caso, declarei as variáveis como citado no vídeo e dessa forma:

#Código

public bool incluir(Cliente p_objCliente)
        {
            bool blnRetorno = false;
            string strSql = "INSERT INTO Cliente (ID, Nome, DataCadastro, CNPJ) " + 
                                " VALUES (@pID, @pNome, @pDataCadastro, @pCNPJ)";

            List<SqlParameter> objParams = new List<SqlParameter>();
            objParams.Add(new SqlParameter("@pID", p_objCliente.ID));
            objParams.Add(new SqlParameter("@pNome", p_objCliente.Nome));
            objParams.Add(new SqlParameter("@pDataCadastro", p_objCliente.DataCadastro));
            objParams.Add(new SqlParameter("@pCNPJ", p_objCliente.CNPJ));

            blnRetorno = objConnManager.executarComando(strSql, objParams);

            return blnRetorno;
        }


Porém, no seguinte local, acabei colocando a informação errada, tinha colocado dessa forma:

#Código
objParams.Add(new SqlParameter("@CNPJ", p_objCliente.CNPJ));


Sem o "p" em @pCNPJ ai tinha lascado tudo kkk!

Valeu a todos que ajudaram, grande abraço, agora é seguir em frente...

0
|
0

Joel Rodrigues
   - 13 jun 2013

Show de bola, amigo. Que bom que deu certo.
Sendo assim, estou marcando o tópico como Concluído.
Abraço.

0
|
0