QUAL A MELHOR FORMA OU DESEMPENHO NO CODIGO?
Estou com algumas dúvidas de qual a forma ideal:
1- Para fechar uma conexão: Tem diferença ou pode gerar algum problema
[b/2- Consultar no SQL Server string Sem levar em Conta Caixa Alta ou Baixa[/b]
Vou fazer uma consulta no banco, com um nome passado, porém quero retornar o ID independente de como está gravado ou foi digitado, ex:
Recursos Humanos = recursos Humanos, RECURSOS Humanos, etc....
Estou fazendo assim, será que a lógica está correta e SQL estão corretos?
1- Para fechar uma conexão: Tem diferença ou pode gerar algum problema
if (cn.State == ConnectionState.Open)
ou
if (cn != null)
{
{
cn.Close();
cn.Dispose();
}
}
[b/2- Consultar no SQL Server string Sem levar em Conta Caixa Alta ou Baixa[/b]
Vou fazer uma consulta no banco, com um nome passado, porém quero retornar o ID independente de como está gravado ou foi digitado, ex:
Recursos Humanos = recursos Humanos, RECURSOS Humanos, etc....
Estou fazendo assim, será que a lógica está correta e SQL estão corretos?
public void Incluir(DepartamentosModelo departamento)
{
Int32 idDeptoExiste = 0; [txt-color=#007100]// variável para receber ID de registro já cadastrado[/txt-color]
idDeptoExiste = JaExiste(departamento.DEPTO.ToLower()); [txt-color=#007100]//passo o texto em minúsculas[/txt-color]
if (idDeptoExiste > 0)
{ /[txt-color=#007100]/rotina de inclusão no banco[/txt-color] }
else
{ [txt-color=#007100]//mensagem já existe no banco[/txt-color] }
}
public Int32 JaExiste(string filtro)
{
[txt-color=#007100]// Cria um DataReader Nulo para receber o conteúdo de pesquisa[/txt-color]
SqlDataReader dr = null;
AbrirConexao();
try
{
[txt-color=#007100]// Cria comando e faz consulta pelo parâmetro[/txt-color]
SqlCommand cmd = new SqlCommand([Ô]Select ID From Departamentos Where LOWER(DEPTO) = [ô][Ô] + filtro + [Ô][ô][Ô], cn);
dr = cmd.ExecuteReader();
if (dr != null)
{
[txt-color=#007100]// retornou conteúdo então existe[/txt-color]
return Convert.ToInt32(dr[[Ô]ID[Ô]].ToString());
}
else
{
return 0;
}
}
catch (SqlException ex)
{ throw new Exception([Ô]Servidor SQL Erro: [Ô] + ex.Number); }
catch (Exception ex)
{ throw new Exception(ex.Message);}
finally
{
if (dr != null)
{ dr.Close(); }
FecharConexao();
}
}
Bom dia Luis
Na 1ª questão eu uso a propriedades ConnectionState, pois a conexão pode estar instanciada, porém fechada.
NO item 2 como o retorno é somente um campos e um registro apenas eu uso o faria o seguinte
Na 1ª questão eu uso a propriedades ConnectionState, pois a conexão pode estar instanciada, porém fechada.
NO item 2 como o retorno é somente um campos e um registro apenas eu uso o faria o seguinte
public Int32 JaExiste(string filtro)
{
// Cria um DataReader Nulo para receber o conteúdo de pesquisa
int32 id = 0;
AbrirConexao();
try
{
// Cria comando e faz consulta pelo parâmetro
SqlCommand cmd = new SqlCommand([Ô]Select ID From Departamentos Where LOWER(DEPTO) = [ô][Ô] + filtro + [Ô][ô][Ô], cn);
// retornou conteúdo então existe
id = Convert.toInt32(cmd.executescalar);
}
catch (SqlException ex)
{ throw new Exception([Ô]Servidor SQL Erro: [Ô] + ex.Number); }
catch (Exception ex)
{ throw new Exception(ex.Message);}
finally
{
FecharConexao();
}
return id;
}
Caro LUIS HERRERA
Para a memória ou uso no código essas condições são a mesma para condições de fechamento da conexão nãofaz muita diferença dependendo da forma que utiliza
Principalmente com
SqlCommand command = new SqlCommand();
SqlDataAdapter adapter = new SqlDataAdapter();
Etc.....
são condições distintas para verificar a conexão ABERTA:
if (conection.State == ConnectionState.Open || conection.State == ConnectionState.Broken)
Essa normalmente utilizada na condição do
TRY
{
// Executa seu código..................
}
CATCH (Exception e)
{
//Trata a menssagem de erro.........
}
FINALLY
{
//fazer algo no finally para continuar rodando se código e eliminando as inconsistencias ocorrida... no caso (cn)
connection.Close()
//Ou
//connection.Dispose();
}
Para a memória ou uso no código essas condições são a mesma para condições de fechamento da conexão nãofaz muita diferença dependendo da forma que utiliza
Principalmente com
SqlCommand command = new SqlCommand();
SqlDataAdapter adapter = new SqlDataAdapter();
Etc.....
são condições distintas para verificar a conexão ABERTA:
if (conection.State == ConnectionState.Open || conection.State == ConnectionState.Broken)
Essa normalmente utilizada na condição do
TRY
{
// Executa seu código..................
}
CATCH (Exception e)
{
//Trata a menssagem de erro.........
}
FINALLY
{
//fazer algo no finally para continuar rodando se código e eliminando as inconsistencias ocorrida... no caso (cn)
connection.Close()
//Ou
//connection.Dispose();
}
Boa tarde Ricargo e obrigado pela resposta.
Só uma dúvida, se o retorno do SQL (ExecuteScalar) não localizar registro cadastrado com esse critério, o que retornará? Um ZERO ou -1 ou Null?
Se ele está sendo associado a uma variável Int32, não poderia ser um valor não numérico?
Só uma dúvida, se o retorno do SQL (ExecuteScalar) não localizar registro cadastrado com esse critério, o que retornará? Um ZERO ou -1 ou Null?
Se ele está sendo associado a uma variável Int32, não poderia ser um valor não numérico?
Luis
Caso o sql não localizar o registro o retorno será a valor da variavel que foi seta (int32 id = 0;) ou seja neste caso 0;
Quanto a segunda pergunta pode ser um valor não numerico sim
Caso o sql não localizar o registro o retorno será a valor da variavel que foi seta (int32 id = 0;) ou seja neste caso 0;
Quanto a segunda pergunta pode ser um valor não numerico sim
Tópico encerrado , respostas não são mais permitidas