Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Lab Design

Store Procedure no mysql

Recommended Posts

Eu to trabalhando num projeto aspx/c# mas preciso usar o mySql.

Como o projeto é similar aos demais que já tenho em sql server, to tentando adaptar usando mysql em vez do sql server.

Para as consultas foi tranquilo pois faço queries direto no banco agora meu problema é que o projeto inicial usa várias stores procedures no sql server automatizando diversas tabelas e não gostaria de reescrever tudo isso dentro do C# inclusive para manter certa semelhança entre eles.

abaixo parte dos codigos que estou utilizando:

 

criação da SP no mysql. Criada com sucesso

DELIMITER $$

 

DROP PROCEDURE IF EXISTS `database`.`webAdminNoticias_Save`$$

 

CREATE DEFINER=`minhadatabase` PROCEDURE `webAdminNoticias_Save`(

IN idNoticia INT,

var_data DATE,

var_titulo VARCHAR(100),

var_subTitulo VARCHAR(255),

var_materia LONGTEXT,

var_foto VARCHAR(100),

var_fotografo VARCHAR(50),

var_legenda VARCHAR(255),

var_fonte VARCHAR(100),

var_creditos VARCHAR(100),

var_link VARCHAR(100),

var_status TINYINT,

OUT ret INT)

BEGIN

REPLACE INTO noticias VALUES(var_data, var_titulo, var_subTitulo, var_materia, var_foto, var_fotografo,

var_legenda, var_fonte, var_creditos, var_link, var_status);

 

IF idNoticia=0 THEN

SELECT @@identity INTO ret;

END IF;

END$$

 

DELIMITER ;

no class para inclusão/edição do registro

Caso execute com sucesso, retorna o Id do registro para o code-behind da página.

[system.ComponentModel.DataObjectMethodAttribute(System.ComponentModel.DataObjec

tMethodType.Insert, false)]

public static int Save(int idNoticia, string data, int status, string titulo, string subTitulo, string materia, string foto,

string fotografo, string legenda, string fonte, string creditos, string link)

{

//Initialize command

MySqlConnection con = new MySqlConnection(_connectionString);

MySqlCommand cmd = new MySqlCommand("webAdminNoticias_Save", con);

cmd.CommandType = CommandType.StoredProcedure;

 

// Initialize parameters

// verifica null

if (titulo == null) return 0;

if (subTitulo == null) subTitulo="";

if (materia == null) materia = "";

if (foto == null) foto = "";

if (fotografo == null) fotografo = "";

if (legenda == null) legenda = "";

if (fonte == null) fonte = "";

if (creditos == null) creditos = "";

if (link == null) link = "";

 

 

 

DateTime _data = Convert.ToDateTime(data);

string strData = data.Substring(6, 4) + "-" + data.Substring(3, 2) + "-" + data.Substring(0, 2);

 

cmd.Parameters.AddWithValue("@idNoticia", idNoticia);

cmd.Parameters.AddWithValue("@data", strData);

cmd.Parameters.AddWithValue("@titulo", titulo);

cmd.Parameters.AddWithValue("@subTitulo", subTitulo);

cmd.Parameters.AddWithValue("@materia", materia);

cmd.Parameters.AddWithValue("@foto", foto);

cmd.Parameters.AddWithValue("@fotografo", fotografo);

cmd.Parameters.AddWithValue("@legenda", legenda);

cmd.Parameters.AddWithValue("@fonte", fonte);

cmd.Parameters.AddWithValue("@creditos", creditos);

cmd.Parameters.AddWithValue("@link", link);

cmd.Parameters.AddWithValue("@status", status);

 

cmd.Parameters.AddWithValue("@ret", 0);

cmd.Parameters["@ret"].Direction = ParameterDirection.Output;

 

using (con)

{

con.Open();

cmd.ExecuteNonQuery();

return Convert.ToInt32(cmd.Parameters["@ret"].Value.ToString());

}

}

Tem algum erro no class acima na passagem de parametros porque no debug após o con.Open() não entra no cmd.ExecuteNonQuery(); e retorna para o code-behind com valor null e é claro dá erro.

 

Alguem já passou por essa experiência e poderia dar alguma sugestão?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Lab Design, o que acontece quando se trabalha com sistemas multi-banco utilizando stored procedure que agilize a conexão com o banco de dados e tenha suporte a N banco de dados.

 

Hoje tenho um framework que ia resolver seu problema, problema que não tenho ainda documentação para disponibilizar como Open Source pro pessoal do Fórum, foi vendo necessidades como a sua que resolvi desenvolver o framework.

 

Mas por experiência própria digo que seria muito ruim reescrever o projeto no C#, mas seria bom você só poder alterar as stored procedures conforme o banco de dados, coisa que o framerwork que desenvolvo ja soluciona.

 

Se quizer entrar em contato comigo podemos trocar idéias.

 

Em relação ao seu código acima, o esquema de parâmetros do Mysql e do SQL Server são diferentes, principalmente pelo caracter @ do SQL Server.

 

Flwww, grande abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

tenta utilizar o MySQL Migration Tool Kit (acho q eh esse o nome) aí você exporta o banco sql server pra mysql..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom Lucas, não é exatamente isso que to procurando pois já tenho o DB mysql que veio do site antigo e cheio de informações. Na realidade o site permanece por hora no sqlserver porém estou criando um novo administrador em dotnet como já tenho outros administradores para o sql server estou tentando reaproveitar o projeto que vem com 80% pronto para aquilo que o cliente necessita. O detalhe é que o projeto original que usa o sql server se utiliza de stored procedures, então o mais fácil seria transportar as SP do sql server para o mysql, eu fiz isso com uma sp somente pra testar e uma vez funcionando, seria somente trocar os sql no codigo c# por mysql e estaria quase tudo resolvido.

 

Mas já resolvi de outra forma, convenci o cliente a contratar um sql server no provedor, so estou aguardando os emails de confirmação para iniciar o projeto dele e ai eu deixo de lado o mysql pelo menos até eu entender melhor essas diferenças de SP do MS para o My

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.