RETORNO DE STRING NA CLASSE

JLAUROSOUZA 27/10/2012 14:54:18
#412976
Galera sou novo em C#, já consigo fazer algumas coisas, mais anda tropeço muito e preciso de ajuda....

Esta é uma Class que eu Criei:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Windows.Forms;
using System.Xml;
using System.Data.Odbc;
using System.Data.OleDb;
using MySql.Data.MySqlClient;
using System.Data.SqlClient;
using System.Timers;
using System.IO;
using ERP.Properties;
namespace ERP
{

public class ClassGlobal
{
public string connString;//String de Conexão [Ô]Para Retornar[Ô]
public string DriverConDB; //String de Tipo de conexão [Ô]Para Retornar[Ô]
string xCondicao, xDrDB, xTipoLg, xLg, xsn, xServer, xDb, xCaminhoCompleto;
public void ConnectDB()
{
string strFilePath = ([Ô]C:\\StringConect.xml[Ô]);
//Lendo XML com XmlTextReader
using (XmlTextReader xml = new XmlTextReader(strFilePath))
{
int i = 0;
string xG;
while (xml.Read())
{
if (xml.NodeType == XmlNodeType.Text)
{
i = i + 1;
xG = (xml.Value);
switch (i)
{
case (1):
xCondicao = xG.ToString();
break;
case (2):
xDrDB = xml.Value;
break;
case (3):
xTipoLg = xml.Value;
break;
case (4):
xLg = xml.Value;
break;
case (5):
xsn = xml.Value;
break;
case (6):
xServer = xml.Value;
break;
case (7):
xDb = xml.Value;
break;
}
}
}
ClassCriptDecrip xCriptoData = new ClassCriptDecrip();
xCriptoData.DecriptoSenha(this.xDrDB.ToString(), this.xDrDB.Length);
this.xDrDB = (xCriptoData.xSenhaDecrypt.Substring(0, this.xDrDB.Length / 2));
ClassCriptDecrip xCriptoServer = new ClassCriptDecrip();
xCriptoServer.DecriptoSenha(this.xServer.ToString(), this.xServer.Length);
this.xServer = (xCriptoServer.xSenhaDecrypt.Substring(0, this.xServer.Length / 2));
ClassCriptDecrip xCriptoBanco = new ClassCriptDecrip();
xCriptoBanco.DecriptoSenha(this.xDb.ToString(), this.xDb.Length);
this.xDb = (xCriptoBanco.xSenhaDecrypt.Substring(0, this.xDb.Length / 2));
this.xCaminhoCompleto = (this.xServer + this.xDb);
ClassCriptDecrip xCriptoSenha = new ClassCriptDecrip();
xCriptoSenha.DecriptoSenha(this.xsn.ToString(), this.xsn.Length);
this.xsn = (xCriptoSenha.xSenhaDecrypt.Substring(0, this.xsn.Length / 2));
ClassCriptDecrip xCriptoLog = new ClassCriptDecrip();
xCriptoLog.DecriptoSenha(this.xLg.ToString(), this.xLg.Length);
this.xLg = (xCriptoLog.xSenhaDecrypt.Substring(0, this.xLg.Length / 2));
if (this.xDrDB == [Ô]ACCESS[Ô])
{
this.DriverConDB = [Ô]A[Ô];
}
else if (this.xDrDB == [Ô]SQLSERVER[Ô])
{
this.DriverConDB = [Ô]S[Ô];
}
else if (this.xDrDB == [Ô]MYSQL[Ô])
{
this.DriverConDB = [Ô]M[Ô];
}
if (this.DriverConDB == [Ô]A[Ô])
{
try
{
this.connString = [Ô]Provider=Microsoft.ACE.OLEDB.12.0;Data Source=[Ô] + this.xCaminhoCompleto + [Ô];Persist Security Info=False;Jet OLEDB:Database Password=[Ô] + this.xsn;
OleDbConnection con = new OleDbConnection(connString);
con.ConnectionString = (connString);
con.Open();
return;
}
catch
{
MessageBox.Show([Ô]Caminho ou Banco MS.ACCESS Inexistente[Ô], [Ô]Falha na Conexão![Ô], MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
}
else if (this.DriverConDB == [Ô]S[Ô])
{
try
{
this.connString = [Ô]User ID=[Ô] + this.xLg + [Ô] ; Password=[Ô] + this.xsn + [Ô];Initial Catalog=[Ô] + this.xDb + [Ô] ; Data Source = [Ô] + this.xServer + [Ô]; Integrated Security=false;[Ô];
SqlConnection con = new SqlConnection(connString);
con.Open();
return ;
}
catch
{
MessageBox.Show([Ô]Servidor SQLSERVER ou Banco Inexistente[Ô],[Ô]Falha na Conexão![Ô], MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
}
else if (this.DriverConDB == [Ô]M[Ô])
{
try
{
this.connString = [Ô]Persist Security Info=False;server=[Ô] + this.xServer + [Ô];database=[Ô] + this.xDb + [Ô];uid=[Ô] + this.xLg + [Ô];pwd=[Ô] + this.xsn;
MySqlConnection con = new MySqlConnection(connString);
con.Open();
return;
}
catch
{
MessageBox.Show([Ô]Servidor MySQL ou Banco Inexistente[Ô], [Ô]Falha na Conexão![Ô], MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
}
}
}
}
}


Bom, ela é para fazer a conexão com meu DB e retornar duas String
uma Chamada [Ô]DriverConDB[ô] que é o Tipo de conexão que Retorna perfeitamente
e uma Chamada [Ô]connString[Ô] Que é a Conexão, que Retorna NULL.

Onde Esta o Erro???
KERPLUNK 29/10/2012 08:52:58
#413035
Só olhando assim, não tem como te ajudar, você vai ter de depurar o código e ver se está passando em uma das linhas que faz a connectionstring, que é o que acho que está acontecendo...
JLAUROSOUZA 29/10/2012 11:08:52
#413046
KERPLUNK
Já Depurei Amigo, tudo acontece [Ô]Aparentemente Bem[Ô], e carrega as Strings sem pró, mais ao sair da Class, só a String [Ô]DriverConDB[Ô] que continua carregada, a outro [Ô]connString[Ô] fica NULL.
KERPLUNK 29/10/2012 11:44:56
#413050
Você está fazendo a verificação condicional(If...else) 2 vezes. Use apenas um e veja se o resultado é diferente...
JLAUROSOUZA 29/10/2012 11:46:24
#413051
Eu preciso delas!!!

Mesmo assim, já fiz sem o [Ô]IF e Else [Ô]

O resultado é o mesmo!!!
AJSO 29/10/2012 15:11:26
#413073
Caro JLAUROSOUZA

Se está começando uma dica que poss dar é não faça dessa forma suas programções. Em uma única classe você tenta resolver todos os problemas de sua aplicação...

Divide isso em alguns métodos para simplificar e torna visível cada função de sua aplicação..................

O retorno de sua Variável está correto......................... uma e outra NULL

Citação:

KERPLUNK Já Depurei Amigo, tudo acontece [Ô]Aparentemente Bem[Ô], e carrega as Strings sem pró, mais ao sair da Class, só a String [Ô]DriverConDB[Ô] que continua carregada, a outro [Ô]connString[Ô] fica NULL.



DriverConDB = [ô]esta correto[ô]

connString = [Ô]NULL[Ô] traz vazio correto


Na sua Lógica nas classe não esta sendo passado nos if de verificação IF (DriverConDB = [Ô]SUAS CONDIÇÕES[Ô])

NÂO ACEITA NENHUMA DAS SUAS CONDIÇÕES


EU TESTEI E NÃO ACEITA NENHUMA E SUA connString FICA VAZIA!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!



COLOQUE UM BREAK POINT NESSAS CONDIÇÕES E VERIFICQUE SE ESTA SENDO UTILIZADO UMA DE SUAS CONDIÇÕES......................

DE PREFERÊNCIA EM TODOS OS IF DESSA CONDIÇÕES ABAIXO QUE INDIQUEI................

Citação:


if (this.DriverConDB == [Ô]A[Ô])
{
try
{
this.connString = [Ô]Provider=Microsoft.ACE.OLEDB.12.0;Data Source=[Ô] + this.xCaminhoCompleto + [Ô];Persist Security Info=False;Jet OLEDB:Database Password=[Ô] + this.xsn;
OleDbConnection con = new OleDbConnection(connString);
con.ConnectionString = (connString);
con.Open();
return;
}
catch
{
MessageBox.Show([Ô]Caminho ou Banco MS.ACCESS Inexistente[Ô], [Ô]Falha na Conexão![Ô], MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
}
else if (this.DriverConDB == [Ô]S[Ô])
{
try
{
this.connString = [Ô]User ID=[Ô] + this.xLg + [Ô] ; Password=[Ô] + this.xsn + [Ô];Initial Catalog=[Ô] + this.xDb + [Ô] ; Data Source = [Ô] + this.xServer + [Ô]; Integrated Security=false;[Ô];
SqlConnection con = new SqlConnection(connString);
con.Open();
return ;
}
catch
{
MessageBox.Show([Ô]Servidor SQLSERVER ou Banco Inexistente[Ô],[Ô]Falha na Conexão![Ô], MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
}
else if (this.DriverConDB == [Ô]M[Ô])
{
try
{
this.connString = [Ô]Persist Security Info=False;server=[Ô] + this.xServer + [Ô];database=[Ô] + this.xDb + [Ô];uid=[Ô] + this.xLg + [Ô];pwd=[Ô] + this.xsn;
MySqlConnection con = new MySqlConnection(connString);
con.Open();
return;
}
catch
{
MessageBox.Show([Ô]Servidor MySQL ou Banco Inexistente[Ô], [Ô]Falha na Conexão![Ô], MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
}



ISSO TUDO ESÁ SENDO PROCESSADO DENTRO DO public void ConnectDB() QUANTAS VEZES SUA APLICAÇÃO UTILIZAR ESSE MéTODO SERÁ PROCESSADO................

TENTE UTILIZAR O MéTODO DE GET SET PARA TROCAR VALORES ENTRE VARIÁVEIS DENTRO DO SEU CÓDIGO......................


MUITO CUIDADO COM REDUNDANCIA EM CÓDIGO.................. A MANUTENÇÃO PODE FICAR DIFÍCIL DE FAZER...........


BOA SORTE
JLAUROSOUZA 29/10/2012 16:03:15
#413076
Amigo AJSO com a sua Ajuda descobrir o meu problema, a Instância q eu estava utilizado para criar a conexão não estava sendo a mesma que eu utilizada para o select, por isso só aparecia [Ô]NULL[Ô]

Mais se vc poder me tira outra duvida irei fica muto agradecido...

é o Seguinte: no VB6, eu utilizo uma variavel Global para a conexão [Ô]cn[Ô], q no login ela conecta ao banco e só fecha ao sair do programa, assim utilizo ela sem todo o sistema so com uma conexão.

Como posso utilizar a connString, como variavel global no C#?
KERPLUNK 29/10/2012 16:09:03
#413078
Resposta curta: Melhor não fazer isso. Utilize o modelo [Ô]on demand[Ô]
Você cria uma classe que no construtor da mesma, ela faz a conexão com o banco e passa essa conexão para uma PROPRIEDADE da classe, propriedade essa que você usaria assim:

using (MinhaClasseConexao cn = new MinhaClasseConexao())
{
using (SqlCommand cmd = new SqlCommand([Ô]select xxx from tabela[Ô], cn.Conexao) //Onde Conexao é a proprieade da classe que contém a conexão com o banco
{
//e por aí vai...
}
}
AJSO 29/10/2012 17:02:16
#413084
Caro JLAUROSOUZA
Talves não seja u ma das melhores práticas, mas responde a sua pergunta
de uma forma simples é assim

em uma classe com as referências

using System;
using System.Data;

declaração da string de conexão publica

public partial class GetstringGlobal
{
public static string GetConnectionString()
{
return [Ô]Data Source=(local);Integrated Security=SSPI;[Ô] +
[Ô]Initial Catalog=AdventureWorks; Asynchronous Processing=true[Ô];
}
}

em outra Classe para Chamar este método GET

Ficaria Assim

referências obrigatórias

using System.Data.SqlClient;

Dentro de um botão ou função


public static teste
{
GetstringGlobal cnn = new GetstringGlobal();

SqlConnection connection = new SqlConnection(cnn.GetConnectionString());
try
{
using (SqlConnection connection = new SqlConnection(cnn.GetConnectionString())
{
SqlCommand sqlcmd = new SqlCommand([Ô]SP_BASE_XXXXX[Ô], connection );

// código a ser implementado por CommandType [StoredProcedure; TableDirect; Text]
//...........
}
finally
{
//qualquerdatareader.Close();
//qualquerdatareader.Dispose();
}
catch (Exception Err)
{ }

}
}


Mais ou menso é isso o resto é sua imaginação

Boa sorte
JLAUROSOUZA 29/10/2012 17:03:07
#413085
KERPLUNK, anexei o Comando q eu estou utilizando, na namespace ainda contem isso:

string xSenhaOpe;
ClassGlobal xDrv = new ClassGlobal();

Ver ai me se possivel me retorna como deverá fica com o comando q vc me passou, pq eu nao estou conseguindo aki, como falei, so nvo em C#, e estou muito abituao no VB6 [Ô]Pecando muito[Ô]
JLAUROSOUZA 29/10/2012 17:15:57
#413089
AJSO, VLW vou ver aki!!!
Tópico encerrado , respostas não são mais permitidas