PROBLEMA ESTRANHO SQL SERVER

LUIS.HERRERA 15/04/2013 15:38:58
#421962
Pessoal estou fazendo um insert numa nova tabela, mas estou recebendo o erro:
SqlParameterCollection não contém SqlParameter com ParameterName [ô]ID_ATIT_HABIL[ô].

Mas esse campo existe na tabela, e também nas Classes DAL e Modelos.

Tabela SQL Server 2005 express
ATIT_HABIL_PERGUNTAS
IDPergunta (PK, int, not null)
PERGUNTA (nvarchar9200), not null)
ID_ATIT_HABIL (int, not null)
ATITouHABIL (bit, not null)
IDIOMA (nchar(2), not null)
INATIVO (bit, not null)

O problema está sendo na classe DAL abaixo linha destacada em vermelho:

public Int32 Incluir(AtitudePerguntaModelo AtitudePergunta)
{
try
{
Dados.AbrirConexao();

Int32 novaHabilidadeID = 0;
string sql = [Ô]INSERT INTO ATIT_HABIL_PERGUNTAS (PERGUNTA,ID_ATIT_HABIL,ATITUDEouHABILIDADE,IDIOMA,PADRAO,INATIVO) [Ô]
+ [Ô]VALUES (@PERGUNTA,@ID_ATIT_HABIL,@ATITUDEouHABILIDADE,@IDIOMA,@PADRAO,@INATIVO); [Ô]
+ [Ô]SELECT CAST(scope_identity() AS int);[Ô];

SqlCommand cmd = new SqlCommand(sql, Dados.cn);
cmd.Parameters.Add([Ô]@PERGUNTA[Ô], SqlDbType.NVarChar, 200);
cmd.Parameters[[Ô]@PERGUNTA[Ô]].Value = AtitudePergunta.PERGUNTA;
[txt-color=#e80000]cmd.Parameters.Add([Ô]@ID_ATIT_HABIL[Ô], SqlDbType.Int);[/txt-color]
cmd.Parameters[[Ô]ID_ATIT_HABIL[Ô]].Value = AtitudePergunta.IDAtitude;
cmd.Parameters.Add([Ô]@ATITUDEouHABILIDADE[Ô], SqlDbType.Bit);
cmd.Parameters[[Ô]ATITUDEouHABILIDADE[Ô]].Value = AtitudePergunta.TIPO;
cmd.Parameters.Add([Ô]@IDIOMA[Ô], SqlDbType.NChar, 2);
cmd.Parameters[[Ô]@IDIOMA[Ô]].Value = AtitudePergunta.IDIOMA;
cmd.Parameters.Add([Ô]@PADRAO[Ô], SqlDbType.Bit);
cmd.Parameters[[Ô]@PADRAO[Ô]].Value = AtitudePergunta.PADRAO;
cmd.Parameters.Add([Ô]@INATIVO[Ô], SqlDbType.Bit);
cmd.Parameters[[Ô]@INATIVO[Ô]].Value = AtitudePergunta.INATIVO;
novaHabilidadeID = (Int32)cmd.ExecuteScalar();
return (Int32)novaHabilidadeID;
}
catch (SqlException)
{ throw; }
catch (Exception)
{ throw; }
finally
{ Dados.FecharConexao(); }
}


Nota Eu mudei a ordem dos campos, e quando fiz isso deu o mesmo problema, agora no campo ATITUDEouHABILIDADE que também existe. Antes ele se chamava TIPO_ATIT_HABIL e pensei que pudesse ser por causa de ter 2 underline, então tirei e o problema continuou igual. Já não sei o que fazer.

Alguma idéia?
OCELOT 15/04/2013 16:50:14
#421966
Resposta escolhida
Repare na linha de baixo da que está em vermelho, nela falta o @ no nome do parâmetro, e tem o mesmo erro duas linhas para baixo no ATITUDEouHABILIDADE, que também falta o @

E eu diria para você tirar os catch se não vai colocar código nenhum neles, deixe só o try e finally
LUIS.HERRERA 15/04/2013 17:15:15
#421969
OCELOT Muito obrigado!
Perdi 3 horas e não consegui ver isso de tão óbvio.
Tópico encerrado , respostas não são mais permitidas