INCLUIR REGISTRO NO SQL SERVER
                    Tentei 2 exemplos que achei, mas ambos dão erro e não inclui o dado na tabela.
A tabela é simples
ID ( smallint, autoincremento), DEPTO(nvarchar,50), INATIVO (bit)
Teste 1
SqlCommand cmd = new SqlCommand();
cmd.Connection = cn;
cmd.CommandType = CommandType.StoredProcedure;
// nome da stored procedure
cmd.CommandText = [Ô]insere_departamento[Ô];
// parâmetros da stored procedure
SqlParameter pid = new SqlParameter([Ô]@ID[Ô], SqlDbType.SmallInt);
pid.Direction = ParameterDirection.Output;
cmd.Parameters.Add(pid);
SqlParameter pdepto = new SqlParameter([Ô]@DEPTO[Ô], SqlDbType.NVarChar, 50);
pdepto.Value = departamento.DEPTO;
cmd.Parameters.Add(pdepto);
SqlParameter pinativo = new SqlParameter([Ô]@INATIVO[Ô], SqlDbType.Bit);
pinativo.Value = departamento.INATIVO;
cmd.Parameters.Add(pinativo);
AbrirConexao();
cmd.ExecuteNonQuery();
departamento.ID = (Int32)cmd.Parameters[[Ô]@id[Ô]].Value;
Teste 2
SqlCommand cmd = new SqlCommand();
cmd.Connection = cn;
AbrirConexao();
cmd.CommandText = [Ô]insert into DEPARTAMENTOS(DEPTO,INATIVO) values (@DEPTO,@INATIVO,); select @@IDENTITY;[Ô];
cmd.Parameters.AddWithValue([Ô]@DEPTO[Ô], departamento.DEPTO);
cmd.Parameters.AddWithValue([Ô]@INATIVO[Ô], departamento.INATIVO);
departamento.ID = Convert.ToInt32(cmd.ExecuteScalar());
Em ambos os caso o Servidor SQL retorna o erro 512 ou 102 dependendo de mudanças que faço no código. O registro não é gravado.
O que quero fazer é inserir os dados da camada modelos, com uma instrução SQL e retornar o número gerado no banco.
Nota: tenho preferência em incluir o SQL no código e não por Store Procedure.
alguém pode ajudar?
            A tabela é simples
ID ( smallint, autoincremento), DEPTO(nvarchar,50), INATIVO (bit)
Teste 1
SqlCommand cmd = new SqlCommand();
cmd.Connection = cn;
cmd.CommandType = CommandType.StoredProcedure;
// nome da stored procedure
cmd.CommandText = [Ô]insere_departamento[Ô];
// parâmetros da stored procedure
SqlParameter pid = new SqlParameter([Ô]@ID[Ô], SqlDbType.SmallInt);
pid.Direction = ParameterDirection.Output;
cmd.Parameters.Add(pid);
SqlParameter pdepto = new SqlParameter([Ô]@DEPTO[Ô], SqlDbType.NVarChar, 50);
pdepto.Value = departamento.DEPTO;
cmd.Parameters.Add(pdepto);
SqlParameter pinativo = new SqlParameter([Ô]@INATIVO[Ô], SqlDbType.Bit);
pinativo.Value = departamento.INATIVO;
cmd.Parameters.Add(pinativo);
AbrirConexao();
cmd.ExecuteNonQuery();
departamento.ID = (Int32)cmd.Parameters[[Ô]@id[Ô]].Value;
Teste 2
SqlCommand cmd = new SqlCommand();
cmd.Connection = cn;
AbrirConexao();
cmd.CommandText = [Ô]insert into DEPARTAMENTOS(DEPTO,INATIVO) values (@DEPTO,@INATIVO,); select @@IDENTITY;[Ô];
cmd.Parameters.AddWithValue([Ô]@DEPTO[Ô], departamento.DEPTO);
cmd.Parameters.AddWithValue([Ô]@INATIVO[Ô], departamento.INATIVO);
departamento.ID = Convert.ToInt32(cmd.ExecuteScalar());
Em ambos os caso o Servidor SQL retorna o erro 512 ou 102 dependendo de mudanças que faço no código. O registro não é gravado.
O que quero fazer é inserir os dados da camada modelos, com uma instrução SQL e retornar o número gerado no banco.
Nota: tenho preferência em incluir o SQL no código e não por Store Procedure.
alguém pode ajudar?
                    Existe um vÃrgula depois de @INATIVO. Seria isso?
Vi esse exemplo no site da MS, em que em vez de usar SQL IDENTITY, usa o scope_identity, talvez ajude:
             cmd.CommandText = [Ô]insert into DEPARTAMENTOS(DEPTO,INATIVO) values (@DEPTO, @INATIVO 
, ); select @@IDENTITY;[Ô];Vi esse exemplo no site da MS, em que em vez de usar SQL IDENTITY, usa o scope_identity, talvez ajude:
static public int AddProductCategory(string newName, string connString)
{
    Int32 newProdID = 0;
    string sql =
        [Ô]INSERT INTO Production.ProductCategory (Name) VALUES (@Name); [Ô]
        + [Ô]SELECT CAST(scope_identity() AS int)[Ô];
    using (SqlConnection conn = new SqlConnection(connString))
    {
        SqlCommand cmd = new SqlCommand(sql, conn);
        cmd.Parameters.Add([Ô]@Name[Ô], SqlDbType.VarChar);
        cmd.Parameters[[Ô]@name[Ô]].Value = newName;
        try
        {
            conn.Open();
            newProdID = (Int32)cmd.ExecuteScalar();
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
    }
    return (int)newProdID;
}
]static public int AddProductCategory(string newName, string connString)
{
    Int32 newProdID = 0;
    string sql =
        [Ô]INSERT INTO Production.ProductCategory (Name) VALUES (@Name); [Ô]
        + [Ô]SELECT CAST(scope_identity() AS int)[Ô];
    using (SqlConnection conn = new SqlConnection(connString))
    {
        SqlCommand cmd = new SqlCommand(sql, conn);
        cmd.Parameters.Add([Ô]@Name[Ô], SqlDbType.VarChar);
        cmd.Parameters[[Ô]@name[Ô]].Value = newName;
        try
        {
            conn.Open();
            newProdID = (Int32)cmd.ExecuteScalar();
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
    }
    return (int)newProdID;
}
                
                    Leandro funcionou perfeitamente seu exemplo.
Sobre o Entity Framework, là uma introdução do Macoratti e achei (a princÃpio) meio complicado e até mais trabalhoso do que a forma padrão, por exibir o uso de outras ferramentas, assistentes, etc...e talvez com uma manutenção mais complicada?
Obrigado por enquanto, pois outras dúvidas surgirão com certeza.
            Sobre o Entity Framework, là uma introdução do Macoratti e achei (a princÃpio) meio complicado e até mais trabalhoso do que a forma padrão, por exibir o uso de outras ferramentas, assistentes, etc...e talvez com uma manutenção mais complicada?
Obrigado por enquanto, pois outras dúvidas surgirão com certeza.
                        Tópico encerrado , respostas não são mais permitidas