Olá, para evitar a inserção de dados duplicados fiz o seguinte. No banco de dados existe uma tabela chamada MARCA, essa tabela tem apenas dois campos (IdMarca INT NOT NULL IDENTITY PK, Nome VARCHAR(35)). Para o campo nome eu criei uma chave UNIQUE então
não é possível inserir duas marcas que contenham o mesmo nome, porém não estava conseguindo via aplicação retornar esse erro para o usuário, vejam o código abaixo:
using (SqlConnection conn = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString))
{
SqlCommand cmmd = new SqlCommand("STPRMarca", conn);
cmmd.CommandType = CommandType.StoredProcedure;
cmmd.Parameters.AddWithValue("@Opc", _INSERT);
cmmd.Parameters.AddWithValue("@Nome", marcaModel.Nome);
try
{
cmmd.Connection.Open();
cmmd.ExecuteNonQuery();
}
catch(SqlException ex)
{
switch (ex.Number)
{
case 2627:
System.Windows.Forms.MessageBox.Show($"UNIQUE KEY {ex.Message}");
break;
}
return false;
}
return true;
}
foi aí então que decidi fazer o seguinte executar o comando via texto ao invés de executar a procedure que estava utilizando
using (SqlConnection conn = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString))
{
SqlCommand cmmd = new SqlCommand("INSERT INTO Marca (Nome) VALUES (@Nome)", conn);
cmmd.Parameters.AddWithValue("@Nome", marcaModel.Nome);
try
{
cmmd.Connection.Open();
cmmd.ExecuteNonQuery();
}
catch(SqlException ex)
{
switch (ex.Number)
{
case 2627:
System.Windows.Forms.MessageBox.Show($"UNIQUE KEY {ex.Message}");
break;
}
return false;
}
return true;
}
Dessa forma aí em cima o código funcionou, mas porque funcionou via texto e não por procedure?