Ir para conteúdo

POWERED BY:

Arquivado

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

fagnerx21

Não estou conseguindo abrir um connection

Recommended Posts

Oi,eu estou terminando um projeto que estou fazendo para o aprendizado em C# e apenas está faltando terminar a parte de distribuição do programa,ou seja,criar o setup,então tenho que acertar os últimos detalhes antes disso,rodei o programa e não deu nenhum erro,warning,etc... ,mas quando tento logar no programa ele dá um erro de conexão e então paro ali e não consigo utilizar o programa 100%,eu vou postar o código do frmLogin e a imagem contendo o erro e informações,se alguém puder me ajudar eu agradeço de coração.

 

CÓDIGO:

 

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Data.OleDb;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

using System.Xml;

 

namespace Agenda

{

public partial class frmLogin : Form

{

//Aumenta a versao do programa à cada incializacão

private string NomeArqConfig = Application.StartupPath +

@"\Agenda.Config";

//Cria uma nova conexão

private OleDbConnection cn;

//frmLogin recebe o cn externo como parâmetro

public frmLogin( OleDbConnection cn )

{

InitializeComponent();

//cn externo é associado ao cn interno

this.cn = cn;

CarregarConfiguracao();

}

 

public void CarregarConfiguracao()

{

//Abre um arquivo xml

XmlReader xml = null;

 

try

{

/*Verifica a existência do arquivo xml,

caso o arquivo não exista,cria-se um novo */

if (!System.IO.File.Exists(NomeArqConfig))

{ GravarConfiguracao(); }

 

xml = new XmlTextReader(NomeArqConfig);

/*Lê o arquivo xml do ínicio ao fim

e a cada leitura,verifica se a TAG lida

tem um determinado nome que coincide com

um campo na tela(exceto para a senha,pois não deve ser lembrada

por motivos de segurança) */

while (xml.Read())

{

switch (xml.Name)

{

/*se coincidir, ele lê o valor da TAG

e transfere-o para o campo na tela,o local onde

o arquivo está armazenado vem do atributo

NomeArqConfig que aponta para um arquivo chamado

Agenda.Config no diretório onde a aplicação foi iniciada */

case "txtNomeText":

txtNome.Text = xml.ReadString();

break;

case "txtDataSourceText":

txtDataSource.Text = xml.ReadString();

break;

case "cboBancoText":

cboBanco.Text = xml.ReadString();

break;

default:

break;

}

}

}

catch (Exception ex)

{

MessageBox.Show("Erro na leitura da configuracao: " + ex.ToString());

}

finally

{

if (xml != null) xml.Close();

}

}

 

private void GravarConfiguracao()

{

XmlTextWriter xml = null;

try

{

//Cria um novo arquivo xml

xml = new XmlTextWriter(NomeArqConfig, null);

xml.Formatting = Formatting.Indented;

xml.Indentation = 3;

xml.Namespaces = false;

xml.WriteStartDocument();

 

xml.WriteStartElement("Configuracoes");

 

xml.WriteStartElement("txtNomeText");

xml.WriteString(txtNome.Text);

xml.WriteEndElement();

xml.Flush();

 

xml.WriteStartElement("txtDataSourceText");

xml.WriteString(txtDataSource.Text);

xml.WriteEndElement();

 

xml.WriteStartElement("cboBancoText");

xml.WriteString(cboBanco.Text);

xml.WriteEndElement();

 

xml.WriteEndDocument();

xml.Flush();

}

catch (Exception ex)

{

MessageBox.Show(ex.ToString());

}

}

 

private void btnOK_Click(object sender, EventArgs e)

{

string Provedor = "";

switch (cboBanco.SelectedIndex)

{

//Captura os parâmetros fornecidos pelo usuário

case -1:

MessageBox.Show("Selecione um banco válido!", "Erro",

MessageBoxButtons.OK, MessageBoxIcon.Error);

break;

case 0:

Provedor = "Microsoft.Jet.OLEDB.4.0;";

break;

case 1:

Provedor = "MSDAORA.1;";

break;

case 2:

Provedor = "SQLOLEDB.1;" +

"Initial Catalog=Agenda;";

break;

}

cn.ConnectionString = "Provider=" + Provedor +

"User ID=" + txtNome.Text + ";" +

"Password=" + txtSenha.Text + ";" +

"Data Source=" + txtDataSource.Text;

try

{

//Tenta abrir a conexão

cn.Open();

}

catch (Exception ex)

{

/*Caso haja falha na abertura da conexão,

exibe uma mensagem de erro e aborta o processo de login */

MessageBox.Show(ex.ToString(), "Erro",

MessageBoxButtons.OK, MessageBoxIcon.Error);

return;

}

/*Caso funcione,fecha o formulário e

grava os parâmetros de conexão */

this.Close();

GravarConfiguracao();

}

 

private void btnCancelar_Click(object sender, EventArgs e)

{

//Fecha o formulário

this.Close();

}

 

private void frmLogin_FormClosed(object sender, FormClosedEventArgs e)

{

//Verifica se a conexão está aberta

if (this.cn.State != ConnectionState.Open)

{

//Caso não esteja aberta,encerra a aplicação

Application.Exit();

}

}

 

 

 

 

 

 

}

}

IMAGEM DE ERRO:

 

Imagem Postada

 

Por favor,preciso terminar isso,me ajudem.

 

Obrigado. http://forum.imasters.com.br/public/style_emoticons/default/natal_biggrin.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

fagnerx21 conforme o erro: O arquivo de informações do grupo de trabalho está faltando ou foi aberto em modo exclusivo por outro usuário.

Dê uma olhada se o banco esta aberto ou se esta sendo usado por outro processo.

 

http://forum.imasters.com.br/public/style_emoticons/default/natal_wink.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tá,mas qual seria esse banco,access?o nome do processo?o único programa que utilizo pra desenvolver seria o VS 2005 PRO,como outro programa poderia ter abrido a conexão sendo que utilizo apenas o vs 2005 pra programar?

Como faria pra verificar isso e resolver o problema?

 

 

EDIT:

Correção,tenho instalado o easyphp,mas ele não está aberto.

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Qual seria esse processo? svchost? tenho ums 3 abertos aqui,caso seja este,bastaria apenas finaliza-lo?Caso seja outro processo,qual seria? como resolvo isso?

 

Por favor,me ajudem,queria poder testar este meu projeto.

 

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites
fagnerx21 quando eu comentei de algum processo não é que obrigatoriamente exista um processo que utilize o banco, eu só questionei se podia ter outra pessoa na rede utilizando o mesmo banco, mas como você disse, só você usa esse banco. Não fique preso procurando algum processo, eu só tinha dado esta idéia pensando que você poderia estar em uma rede com mais usuários no mesmo banco.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Existe uma siute de ferramentas muito útiles para estos casos é Sysintenal (www.sysinternals.com)

 

Os mejores pra este caso sâo:

 

Filemon: Monitore atividade o arquivo em tempo real.

 

Process Explorer

Busca arquivos, claves o registro no Windows é outros objetos que faz abertos por o processo.

 

 

 

Saudações

Sergio.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Em qual linha exatamente daquele código que você postou esta dando o erro ??

Qual dos provedores que deu o erro?

Provedor = "Microsoft.Jet.OLEDB.4.0;"

Provedor = "MSDAORA.1;"

Provedor = "SQLOLEDB.1;"

Eu estou utilizando o banco em access,no caso,Provedor = "Microsoft.Jet.OLEDB.4.0;".

 

Ah,desculpe-me com a demora na resposta,acontece que estou sem internet em casa e utilizo de vez em quando em lan - house.

 

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

fagnerx21 copiei o seu código para tentar ajudar, só não entendi o que é o cboBanco é um TextBox ???

É um combobox,aonde selecionará qual o tipo de banco,Access,Oracle ou SQL.

Valeu.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fagner,

 

Verifique sua string de conexão. Está faltando o ponto e vírgula ";" para separar o User ID do Provider

 

cn.ConnectionString = "Provider=" + Provedor + ";"

"User ID=" + txtNome.Text + ";" +

"Password=" + txtSenha.Text + ";" +

"Data Source=" + txtDataSource.Text;

 

Teste e verifique.

 

abçs

 

:unsure:

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.