Tenho o código abaixo para a DAL:
private int _InsertCountry(Country country)
{
int ret = 0;
MySqlConnection con = new MySqlConnection(ConfigurationManager.ConnectionStrings["PlatformWriter"].ConnectionString);
MySqlCommand cmd = new MySqlCommand("sp_CountryCreate", con);
cmd.CommandType = CommandType.StoredProcedure;
try
{
cmd.Parameters.Add(new MySqlParameter("@inCountry", country.country));
cmd.Parameters.Add(new MySqlParameter("@inCountryCode", country.countryCode));
con.Open();
// Está apontando que a SP não existe, mesmo estando corretas
// int retorno = cmd.ExecuteNonQuery();
MySqlDataReader dr = cmd.ExecuteReader();
if (dr != null)
{
ret = Convert.ToInt32(dr[0].ToString());
}
}
catch (MySqlException ex) { throw ex; }
finally { if (con != null) { con.Close(); } }
return ret;
}
O código, da forma acima, está caindo em Catch, com o erro:Procedure or function '`sp_CountryCreate`' cannot be found in database '`DefaultPlatform`'.Onde DefaultPlatform é o nome da base. O C# consegue abrir a conexão, tanto que cai em Catch depois de executar o cmd.ExecuteReader(). Estou usando ExecuteReader para pegar o retorno do Country ID cadastrado.
Adiantando: a Connection String está certa, testei com o código abaixo e executou sem problemas:
using (MySqlConnection conn = new MySqlConnection(ConfigurationManager.ConnectionStrings["PlatformWriter"].ConnectionString))
{
MySqlCommand comm = new MySqlCommand("insert into Country (country, countryCode) values (@inCountry, @inCountryCode)", conn);
//comm.CommandType = CommandType.StoredProcedure;
comm.Parameters.Add(new MySqlParameter("@inCountry", country.country));
comm.Parameters.Add(new MySqlParameter("@inCountryCode", country.countryCode));
conn.Open();
comm.ExecuteNonQuery();
}
A SP em questão foi testada anteriormente e está funcionando adequadamente, o código está abaixo:
drop procedure if exists sp_CountryCreate//
create procedure sp_CountryCreate(
inCountry varchar(72),
inCountryCode integer)
begin
insert into Country (country, countryCode) values (inCountry, inCountryCode);
select last_insert_id();
end//
E não quero ouvir um "use SQL Server para C#"... Quem disser isso, vai reescrever TODAS as SP's desse banco de dados!Brincadeiras à parte, não tem como migrar, a lógica das SP's é bastante trabalhosa e não posso me dar ao luxo de fazer isso, estou sozinho na equipe
