RETORNO DE STRING NA CLASSE
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???
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.
Mesmo assim, já fiz sem o [Ô]IF e Else [Ô]
O resultado é o mesmo!!!
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
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#?
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...
}
}
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
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[Ô]