Ir para conteúdo

POWERED BY:

Arquivado

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

mauroshikay

Problemas com Mysql

Recommended Posts

Olá a todos bom dia! eu desenvolvi um website para um cliente com aps.net c# e mysql, so que este site depois que tivemos um certo aumento na vistação está caindo toda hora, dando erros no mysql, o Erro de null expection, mas eu ja revirei o codigo, mudei para singletoon, mas nada de funcionar, volta e meia o site da erro e so volta a funcionar quando eu envio novamente a pasta bin com as dlls do projeto. Este site esta na hospedagem compartilhada da locaweb. Abaixo minha classe de conexão e um classe que usa esta conexão, existe algo errado nela?

 

 

using System;
using MySql.Data.MySqlClient;


namespace WebSite.Connection
{
    public class Conexao
    {
        private static Conexao _instance;
        private MySqlConnection _connection;
    private Conexao(){}
    public static Conexao GetInstance()
    {
        if (_instance == null) _instance = new Conexao();
        return _instance;
    }
    private MySqlConnection Conection()
    {
        if (_connection == null)
        {
           
            String dataSourceOn = "Database=db;Data Source=meuhost.com.br;User Id=usuario;Password=senha;Allow Zero Datetime=true";
        
            try
            {
                String myConnectionString = dataSourceOn;
                _connection = new MySqlConnection(myConnectionString);
            }
            catch
            {
                return null;
            }
        }
        return _connection;
    }
    public MySqlConnection getConexao()
    {
        return Conection();
    }
    }
}

E aqui uma classe que usa a conexão para manipular o banco:

 

public DataSet buscaVagas()
        {
           
                Conexao conexao = Conexao.GetInstance();
                string mySelectQuery = "select id Codigo, titulo Titulo from vagas ORDER BY  data_cadastro asc";
                DataSet dsCargos = new DataSet();
                MySqlDataAdapter adapter = new MySqlDataAdapter();
                MySqlConnection myConnection = conexao.getConexao();
                try
                {
                    if (ConnectionState.Open != myConnection.State)
                        myConnection.Open();
                }
                catch (Exception ex)
                {
                    BLLog.GetInstance().LoginFine("Erro no metodo buscaVagas() com os parametros: "+ex.Message);
                    myConnection.Close();
                    myConnection.Open();
                }
                adapter.SelectCommand = new MySqlCommand(mySelectQuery, myConnection);
                adapter.Fill(dsCargos);
                adapter.Dispose();
                myConnection.Close();
                return dsCargos;
            
           
                
            
        }

Compartilhar este post


Link para o post
Compartilhar em outros sites

Agora to meio sem tempo pra dar uma olhada, mais.. o dataadapter acho que tem que dar um close, ou estou viajando.. heuaiehiua mas tenta ai

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mauro, olhado seu codigo eu acho que só esta meio fora de ordem. pois caso de um catch você ta abrindo a conexão e isso é errado.

catch (Exception ex)
 	{
 	BLLog.GetInstance().LoginFine("Erro no metodo buscaVagas() com os parametros: "+ex.Message);
 	myConnection.Close();
 	myConnection.Open();
 	}

Tenta mudar pra:

public DataSet buscaVagas()
 	{ 	
 	Conexao conexao = Conexao.GetInstance();
 	string mySelectQuery = "select id Codigo, titulo Titulo from vagas ORDER BY data_cadastro asc";
 	DataSet dsCargos = new DataSet();
 	MySqlDataAdapter adapter = new MySqlDataAdapter();
 	MySqlConnection myConnection = conexao.getConexao();
 	try
 	{
 	if (ConnectionState.Open != myConnection.State)
 	myConnection.Open();

 	adapter.SelectCommand = new MySqlCommand(mySelectQuery, myConnection);
 	adapter.Fill(dsCargos);
 	adapter.Dispose();
 	}
 	catch (Exception ex)
 	{
 	BLLog.GetInstance().LoginFine("Erro no metodo buscaVagas() com os parametros: "+ex.Message);
 	}
	finally 
 	{
 	myConnection.Close();
 	}
 	
 	

 	return dsCargos;	
 	}
Pois idependente de tudo que ocorre no metodo ele sempre vai fechar a conexão!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá, verifique com a Locaweb o limite de memória que é alocada para o banco de dados, pois seu processo pode estar utilizando mais memória do que necessário e com isso o servidor "desliga" as conexões.

 

Atenciosamente

Compartilhar este post


Link para o post
Compartilhar em outros sites

Aqui vai um exemplo que eu utilizo:

 

Classe para manipular a conexão

	public static class Conexao
	{
 	public static MySqlConnection OpenConnection()
 	{
 	//Edite esse cara direitinho
 	MySqlConnection conection = new MySqlConnection("SERVER=xxxxxxxxx.com.br;DATABASE=cosmai;UID=xxxxxx;PASSWORD=*****;");
 	conection.Open();
 	return conection;
 	}

 	public static void CloseConnection(MySqlConnection conection)
 	{
 	conection.Close();
 	}
	}

agora vai a classe que vai sim manipular o banco.

 

private static List<Links> PreencheLinks(MySqlDataReader Reader)
 	{
 	List<Links> lstLinks = new List<Links>();
 	while (Reader.Read())
 	{
 	Links links = new Links();
 	for (int i = 0; i < Reader.FieldCount; i++)
 	{
 	switch (i)
 	{
 	case 0:
 	links.LinkId = Convert.ToInt32(Reader.GetValue(i).ToString());
 	break;
 	case 1:
 	links.Title = Reader.GetValue(i).ToString();
 	break;
 	case 2:
 	links.Url = Reader.GetValue(i).ToString();
 	break;
 	case 3:
 	links.CategoriaId = (Reader.GetValue(i) == null || Reader.GetValue(i).ToString() == "") ? 0 : Convert.ToInt32(Reader.GetValue(i).ToString());
 	break;
 	case 4:
 	links.Descricao = (Reader.GetValue(i) == null || Reader.GetValue(i).ToString() == "") ? "" : Reader.GetValue(i).ToString();
 	break;
 	default:
 	break;
 	}
 	}
 	lstLinks.Add(links);
 	}

 	return lstLinks;
 	}

 	public static List<Links> GetLinksByCategoriaId(int categoriaId)
 	{

 	MySqlConnection connection = Conexao.OpenConnection();
 	MySqlCommand command = connection.CreateCommand();
 	MySqlDataReader Reader;
 	try
 	{
	//Uma coisa que observei no seu código que pode atrapalhar - toda query no mySql pelo menos neste framework deve terminar com ";"
 	command.CommandText = string.Concat("SELECT * FROM Links WHERE CategoriaLinkId = ", categoriaId, ";");
 	Reader = command.ExecuteReader();
 	Conexao.CloseConnection(connection);

 	//Dica Bacana
 	//Gosto de utilizar Lista Genérica ou Collections trabalhando com Entidades 
 	//então utilizo o método PreencheLinks para inserir as linhas do select na lista
 	List<Links> lstLinks = PreencheLinks(Reader);
 	}
 	catch (Exception)
 	{
 	Conexao.CloseConnection(connection);
 	return null;

 	if (lstLinks.Count == 0)
 	return null;
 	return lstLinks;
 	}
 	}

 	public class Links
 	{
 	private int linkId;

 	public int LinkId
 	{
 	get { return linkId; }
 	set { linkId = value; }
 	}
 	private string title;

 	public string Title
 	{
 	get { return title; }
 	//dica bana isso pode evitar o famozo inject SQL que custuma dar muitos problemas, mais é sempre bom validar 
 	//o seu FORM no CLIENTE(NAVEGADOR POR JAVASCRIPT e no SERVER no CodeBihind da Pagina ou Controle)
 	set { title = value.Replace("'", "′").Replace("'", "‘").Replace("'", "’"); }
 	}

 	private string descricao;

 	public string Descricao
 	{
 	get { return descricao; }
 	set { descricao = value.Replace("'", "′").Replace("'", "‘").Replace("'", "’"); }
 	}

 	private string url;

 	public string Url
 	{
 	get { return url; }
 	set { url = value.Replace("'", "′").Replace("'", "‘").Replace("'", "’"); }
 	}
 	private int categoriaId;

 	public int CategoriaId
 	{
 	get { return categoriaId; }
 	set { categoriaId = value; }
 	}
 	}

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.