none
variaveis acessiveis em todo lugar.

    Question

  •  

    Pessoal.

     

    Eu estou com uma dúvida sobre variáveis.

     

    Eu descobri que colocando uma função na master page ela será executada em todas as páginas que tiverem esta master page, ai pensei, poderia colocar algumas variáveis que eu uso em vários sites lá..

     

    Por exemplo..

     

    em todas as páginas antes da função eu declaro as variáveis:

     

    public SqlConnection conn;

    public SqlCommand sql;

     

     

    e em todas as funções pageload de todas as páginas eu faço:

     

    conn = new SqlConnection(WebConfigurationManager.ConnectionStrings["conn2"].ConnectionString);

    sql = new SqlCommand();

    sql.CommandType = CommandType.Text;

    sql.Connection = conn;

     

     

    Este código se repete por todas as 50 e poucas páginas, tentei coloca-lo na master page que uso, mas não deu certo, tem algum truque para funcionar?

     

    Abraços

    Thursday, September 06, 2007 3:10 PM

Answers

  • Ola Alex,

    Eu também. Você utiliza o VS.NET então roda no servidor do próprio.

    A questão de publicar a aplicação em um outro servidor já e outra coisa e demandará você estudar isso. Localmente (VS.NET) ainda não funciona?

    Wednesday, September 12, 2007 1:39 PM
  • DESCOBRI!!! hehehe..

     

    Bem obviamente o que o Israel falou que para uma classe funcionar é preciso publicar o site está totalmente certo.

     

    Então vamos por partes:

     

    COMO PUBLICAR UM SITE com o visual studio 2005:

     

    - Vá no menu Build;

    - Clique em Build Web Site;

    - Verifique se não deu erros, se não abrir a janela automáticamente vá em View>Error List;

    - Estando limpo os erros vá em Build e clique em Public Web Site;

    - Escolha a pasta que vai salvar e aperte OK;

     

    Como testar o site.

    - Antes de mais nada quero ressaltar que o asp.net é diferente do ASP portanto para publicar  um site, você deve ter um site ou ter um diretório virtual caso o sistema fique dentro de um site.

    - crie o diretório Virtual;

    - publique os arquivos gerados e pode testar.

     

     

    Meu problema neste tópico é que além de não saber publicar eu não tinha criado diretório virtual.

     

    Abraço a todos espero ter ajudado...

     

    Wednesday, September 19, 2007 2:27 PM

All replies

  • o mais indicado seria vc herdar essas variáveis..

    coloca elas em uma página (minhasVar.aspx)  e herda nas outras...

    geralmente elas herdam da classe System.Web.UI.Page..

    por exemplo: public partial class CSharpClass : System.Web.UI.Page

    vc coloca a sua

    public partial class CSharpClass : minhasVar


    Thursday, September 06, 2007 3:57 PM
  • Interessante Sandro.

     

    Mas assim dúvida: não vai dar problemas? posso usar minha master page normal?

     

    Outra coisa.. se eu quisesse incluir mais de um, faria:

     

    public partial class master_Default : Variaveis : Variaveis2: Variaveis 3

     

    ou naõ tem como?

     

    E se meu arquivo estivesse dentro de uma pasta faria como?

     

    public partial class master_Default : include/Variaveis

     

    ???

     

    Mas se não souber, não precisa se preocupar.. já ajudou bastante..

     

    abraços

     

    Thursday, September 06, 2007 5:48 PM
  •  ixi antes tinha dado certo.. agora está dando este erro

     

    Server Error in '/' Application.

    Compilation Error

    Description: An error occurred during the compilation of a resource required to service this request. Please review the following specific error details and modify your source code appropriately.

    Compiler Error Message: CS0246: The type or namespace name 'Variaveis' could not be found (are you missing a using directive or an assembly reference?)

    Source Error:

    Line 1:  
    Line 2:  public partial class Login : Variaveis
    Line 3:  
    Line 4:  {

    Thursday, September 06, 2007 6:04 PM
  • Ola Alex,

    O ideal é utiliza um DalHelper: http://www.projetando.net/Sections/ViewArticle.aspx?ArticleID=3

    Friday, September 07, 2007 8:12 PM
  • Israel,

     

    A idéia do DalHelper é bacana.. mas achei meio complicado, eu precisava de algo mais simples..

     

    No asp quando eu programava eu usava o include..

     

    então todos meus arquivos tinham os includes:

     

    <!--#include file="variaveis.asp" -->

    <!--#include file="classes.asp"-->

     

    Nas primeira linhas do código.

     

    Eu queria algo parecido, pois me ensinaram que quando se repete muito o código é que está errado.

     

    E isto está acontecendo várias vezes no meu sistema.

     

    Abraços

     

    Monday, September 10, 2007 1:15 PM
  • Ola Alex,

    O problema é que você ainda está com o conceito antigo, do ASP Classico. As coisas mudaram bastante no ASP.NET.

    A minha dica é mesmo você estudar sobre reutilização de código, DLLs justamente para não cair no problema que você mesmo detectou, que é a repetição do código por todo o lugar. Gaste um tempo e faça alguns testes com o DALHelper e verá que a sua utilização não é tão complicada quanto está achando.

    Monday, September 10, 2007 1:45 PM
  •  

    Israel.

     

    Sou grato pela sua ajuda, e vou sim estudar o dalhelper.

     

    Mas acredito que ele não vai solucionar totalmente meu problema, pois pelo que eu vi (por cima), ele ajuda na questão de muitas conexões que é um dos meus maiores problemas.

     

    Mas, por exemplo se quiser criar uma variável assim:

     

    String x;

    x = "valor que eu quero";

     

    E se eu quiser usar este valor por todos os arquivos (SEM USAR SESSION, Web.Config) eu não sei como fazer.

     

    Eu quero sim!!! Poder programar meu código em classes, aonde reaproveito o meu código, porém até hoje não consegui fazer.

     

    Um tempo atrás coloquei um tópico que foi muito discutido, mas não se chegou a solução alguma como pode ver no link abaixo:

     

    http://forums.microsoft.com/msdn-br/ShowPost.aspx?PostID=1203960&SiteID=21

     

    Inclusive você participou dando algumas dicas.

     

    Me sinto impotente as vezes com o asp.net, por não poder programar usando classes.

     

    E mais impotente quando dá uns erros como no do tópico que postei e não sei resolver.

     

    Abraços.

     

     

     

     

     

    Monday, September 10, 2007 3:55 PM
  • Pessoal, sei que as dicas do israel sempre são as melhores, não é a toa que ele é um MVP, mas alguém sabe me dizer porque quando eu faço:

     

    public partial class AdmClientes : NomedoArquivoQueQueroIncluir

     

    ele dá o seguinte erro:

     

    Server Error in '/' Application.

    Compilation Error

    Description: An error occurred during the compilation of a resource required to service this request. Please review the following specific error details and modify your source code appropriately.

    Compiler Error Message: CS0246: The type or namespace name 'Variaveis' could not be found (are you missing a using directive or an assembly reference?)

    Source Error:

    Line 1:  
    Line 2:  public partial class Login : Variaveis
    Line 3:  
    Line 4:  {

    Tuesday, September 11, 2007 2:28 PM
  • vc criou uma classe Variaveis?? onde esta essa classe?? dentro de qual arquivo???
    Tuesday, September 11, 2007 2:45 PM
  • Sim criei..

     

    o código dela é este:

     

    Variaveis.aspx

     

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Variaveis.aspx.cs" Inherits="Variaveis" %>

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

    <html xmlns="http://www.w3.org/1999/xhtml" >

    <head runat="server">

    <title>Untitled Page</title>

    </head>

    <body>

    <form id="form1" runat="server">

    <div>

    </div>

    </form>

    </body>

    </html>

     

     

    Variaveis.aspx.cs

     

    using System;

    using System.Data;

    using System.Data.SqlClient;

    using System.Configuration;

    using System.Collections;

    using System.Web;

    using System.Drawing;

    using System.Web.Security;

    using System.Web.UI;

    using System.Web.UI.WebControls;

    using System.Web.UI.WebControls.WebParts;

    using System.Web.UI.HtmlControls;

    using System.Web.Configuration;

    using System.IO;

     

    public partial class Variaveis : System.Web.UI.Page

    {

    public SqlConnection conn;

    public SqlCommand sql;

     

    protected void Page_Load(object sender, EventArgs e)

    {

    String PaginaAtual = Request.Path.Substring(Request.Path.LastIndexOf("/") + 1);

     

    conn = new SqlConnection(WebConfigurationManager.ConnectionStrings["conn2"].ConnectionString);

    sql = new SqlCommand();

    sql.CommandType = CommandType.Text;

    sql.Connection = conn;

    if (PaginaAtual != "Login.aspx")

    {

    if (Session["Logado"] != "ok")

    {

    Response.Redirect("Login.aspx");

    }

    }

    else

    {

    MenuPrincipal.Visible = false;

    }

    }

    }

     

    Tuesday, September 11, 2007 3:00 PM
  • e este arquivo esta dentro de qual namespace??

    não tem essa informação dentro do seu arquivo...

    namespace SeuNameSpace
    {

    public partial class Variaveis : System.Web.UI.Page

    {

    public SqlConnection conn;

    public SqlCommand sql;

    }...


    }




    Tuesday, September 11, 2007 3:08 PM
  • Ola Alex,

    O código que mostra não faz muito sentido para mim. O conceito de Partial Classe concentra-se em distribuir códigos entre dois arquivos físicos diferentes mas que, quando compilado, será apenas uma classe e isso não tem nada a ver com herança.

    O que realmente quer fazer que, desculpe-me, mas não consegui entender.

    Tuesday, September 11, 2007 3:09 PM
  • Então.. este é o arquivo que estou vinculando.. tá errado?

     

    nos outros arquivos faço

     

    public partial class AdmClientes : Variaveis

     

    e dai dá o erro que te falei..

     

    Tem outro jeito melhor de compartilhar funções, classes e variáveis?

     

    Abraço

    Tuesday, September 11, 2007 3:13 PM
  • Ola Alex,

    Para compartilhar váriaveis e funções você deve adicionar criar uma classe no seu projeto. Chame-a de Funcoes.cs. Dentro dela coloque:

    public class Funcoes{
         public static string Funcao1(string nome){
              return "Ola " + nome;
         }
    }


    Agora, no seu arquivo ASPX faz:

    Response.Write( Funcoes.Funcao1("Israel"));

    Tuesday, September 11, 2007 3:22 PM
  • Então Israel..

     

    Fiz o que me pediu, e quando eu criei a classe ele perguntou se eu queria criar a classe na pasta app_code eu disse que sim.

     

    dai quando coloquei o código deu o seguinte erro..

     

    Compilation Error

    Description: An error occurred during the compilation of a resource required to service this request. Please review the following specific error details and modify your source code appropriately.

    Compiler Error Message: CS0103: The name 'Funcoes' does not exist in the current context

    Source Error:

    Line 48: 
    Line 49: 
    Line 50:         Response.Write(Funcoes.Funcao1("Israel"));
    Line 51: 
    Line 52:     }

    O engraçado é que quando escrevo Funcões e dou ctrl + ESPAÇO aparece a função "Funcao1" e seus parametros.

     

    Abraço

     

    Tuesday, September 11, 2007 6:04 PM
  • Ola Alex,

    Deixe-me ver o todo código da sua classe.

    Tuesday, September 11, 2007 6:12 PM
  • Israel..

     

    segue em anexo....

     

     

    using System;

    using System.Data;

    using System.Configuration;

    using System.Web;

    using System.Web.Security;

    using System.Web.UI;

    using System.Web.UI.WebControls;

    using System.Web.UI.WebControls.WebParts;

    using System.Web.UI.HtmlControls;

    /// <summary>

    /// Summary description for Funcoes

    /// </summary>

    public class Funcoes

    {

    public Funcoes()

    {

    //

    // TODO: Add constructor logic here

    //

    }

    public static string Funcao1(string nome)

    {

    return "Ola " + nome;

    }

    }

    Tuesday, September 11, 2007 6:20 PM
  • Ola Alex,

    O que me parece é que a sua classe não está sendo compilada. Será que não tem nenhum outro erro que esteja impedindo de compilar a aplicação? Veja isso na lista de erros do VS.NET.

    Tuesday, September 11, 2007 6:23 PM
  • Israel..

     

    Isto que você falou tem lógica..

     

    Pois no meu outro tópico, a minha aplicação só funcionava quando apertava F5 para compilar e testar com o servidor próprio do visual.

     

    E acho que só vai funcionar se fizer o mesmo...

     

    Como faço para ver esta lista de erros do VS.NET?

     

    Desculpe a ignorância..

     

     

    Tuesday, September 11, 2007 6:48 PM
  • Ola Alex,

    Menu View >> Error List.

     

    Tuesday, September 11, 2007 7:04 PM
  •  

    Israel

     

    Perguntei poque quando eu abri esta área estava vazia.

     

    Apertei F5 e apareceram alguns erros de um arquivo que estava dando uns paus esquisitos..

     

    PAra acelerar o processo deletei o arquivo e coloquei um novo vazio sem nada de código.

     

    Ai sobraram alguns erros do tipo variavel x foi declarada e não foi usada.

     

    Agora estou apertando F5 e não aparece erros mais..

     

    Mas mesmo assim estou com o erro...

     

    existe mais alguma forma de saber se existem mais erros no meu projeto?

     

     

    Tuesday, September 11, 2007 7:52 PM
  • Ola Alex,

    Tente criar um projeto novo para ver se o problema não é na aplicação.

     

    Wednesday, September 12, 2007 11:40 AM
  •  

    Bom dia Israel, obrigado por continuar respondendo

     

    Fiz o seguinte:

     

    - Criei novo website;

    - Adicionei uma nova Classe chamada class 1:

    - O código ficou como:

    using System;

    using System.Data;

    using System.Configuration;

    using System.Web;

    using System.Web.Security;

    using System.Web.UI;

    using System.Web.UI.WebControls;

    using System.Web.UI.WebControls.WebParts;

    using System.Web.UI.HtmlControls;

    public class Class1

    {

    public Class1()

    {

    }

    public static string Funcao1(string nome)

    {

    return "Ola " + nome;

    }

    }

     

     

    - Coloquei no Default.aspx.cs o código:

    using System;

    using System.Data;

    using System.Configuration;

    using System.Web;

    using System.Web.Security;

    using System.Web.UI;

    using System.Web.UI.WebControls;

    using System.Web.UI.WebControls.WebParts;

    using System.Web.UI.HtmlControls;

    public partial class _Default : System.Web.UI.Page

    {

    protected void Page_Load(object sender, EventArgs e)

    {

    Response.Write( Class1.Funcao1("Teste") );

    }

    }

     

    Repara que tá verdinho o Class1, ou seja.. ele reconhece a classe.

     

    - O código do Default.aspx só para constar está assim:

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

    <html xmlns="http://www.w3.org/1999/xhtml" >

    <head runat="server">

    <title>Untitled Page</title>

    </head>

    <body>

    <form id="form1" runat="server">

    <div>

    </div>

    </form>

    </body>

    </html>

     

    E ele pediu para criar um web.config que está assim:

    <?xml version="1.0"?>

    <configuration>

    <appSettings/>

    <connectionStrings/>

    <system.web>

    <compilation debug="true"/>

    <customErrors mode="Off"/>

    </system.web>

    </configuration>

     

     

    E o resultado é:

     

    Server Error in '/' Application.

    Compilation Error

    Description: An error occurred during the compilation of a resource required to service this request. Please review the following specific error details and modify your source code appropriately.

    Compiler Error Message: CS0103: The name 'Class1' does not exist in the current context

    Source Error:

    Line 13:     protected void Page_Load(object sender, EventArgs e)
    Line 14:     {
    Line 15:         Response.Write( Class1.Funcao1("Teste") );
    Line 16:     }
    Line 17: }

     

     

     

    Agora se eu aperto F5 o resultado é:

     

    Ola Teste

     

    Estranho né?

     

    Isto me leva a concluir não sei.. mas deve ter alguma configuração a mais no web.config.. ou no servidor para se fazer..

     

    Abraço

    Wednesday, September 12, 2007 12:10 PM
  • Ola Alex,

    Mas não é isso. Você tem que apertar F5 para que ele possa compilar, iniciar o servidor local do VS e exibir no browser.

    Wednesday, September 12, 2007 12:36 PM
  • Como assim Israel. não entendi..

     

    Se eu quiser que funcione a classe tenho que apertar F5, ou seja.. só vai funcionar no endereço http://localhost:3905/teste/ ?

     

    E como faço para publicar no www.site.com.br?

     

    Fiquei confuso agora..

     

    Wednesday, September 12, 2007 1:04 PM
  • Ola Alex,

    Eu também. Você utiliza o VS.NET então roda no servidor do próprio.

    A questão de publicar a aplicação em um outro servidor já e outra coisa e demandará você estudar isso. Localmente (VS.NET) ainda não funciona?

    Wednesday, September 12, 2007 1:39 PM
  • Pera ai.. deve ter alguma coisa errada nisto.. vamos ponderar algumas coisas..

     

    Eu uso o Visual Studio 2005 Team Edition for Software Developers, para desenvolver meus sites.

     

    Crio um site normalmente, na opção criar WebSite.

     

    E consigo fazer um site que acessa, manipula os dados de um banco de dados sql server ou mysql normalmente.

     

    Porém a unica forma que funcionou esta manipulação dos dados foi usando um SQLDataSource, aonde posso gerar os comandos Insert, Update, Delete e Select Automáticamente.

     

    As vezes eu preciso fazer uma manipulação diferente por exemplo.. inserir um registro e depois inserir em outra tabela o código que foi gerado. Esta manipulação eu faço dentro do código usando por exemplo o código abaixo:

     

    sql.CommandText = "SELECT anexo FROM INTRARS WHERE CODRS=" + CodRS;

    AbreConexao();

    dr = sql.ExecuteReader();

    dr.Read();

     

    Publico o site simplesmente copiando todo o projeto que criei no site, ou seja vai os arquivos *.aspx, *.aspx.cs, web.config, *.master (masterpages) entre outros.

     

    Estou fazendo desta forma, porque no começo do meu aprendizado, eu peguei e comecei a fazer classes, com funções de conexão, funções de manipulação de dados.. mas ai quando eu ia instanciar a classe ou usá-la num arquivo dava o erro que postei para você.

     

    E notei que quando apertava F5 (Start Debuging) as classes funcionavam.

     

    Como na época naquele tópico que publiquei não consegui resolver este problema, deixei de lado e fui desenvolvendo normal da forma que descrevi acima.

     

    Mas, eu preciso poder usar classes e funções no código, pois são mais de 50 páginas e estou tendo muita repeticção de código e funções..

     

    Só por exemplo, todo código que vou manipular o banco via código e não via SQL DAtaSource, eu tenho que colocar sempre estas linhas:

     

    public SqlConnection conn;

    public SqlCommand sql;

     

    conn = new SqlConnection(WebConfigurationManager.ConnectionStrings["conn2"].ConnectionString);

    sql = new SqlCommand();

    sql.CommandType = CommandType.Text;

    sql.Connection = conn;

     

     

    e sempre esta função:

     

    public void AbreConexao()

    {

    if (conn.State == ConnectionState.Open)

    {

    conn.Close();

    }

    conn.Open();

    }

     

     

    E só estou dando um exemplo tem algumas funções que fazem calculo que sempre tenho que repitir nas páginas não é só o problema de conexão que tenho.. ou seja a repetição é necessária porque não consigo usar classes no meu projeto..

     

    e também não consigo compartilhar a classe como nas primeiras sugestões deste tópico..

     

    E não dá para usar a aplicação no http://localhost:8443/teste/

     

    Estou numa encruzilhada.. se voltar vou insitir na minha burrice de repitir código.. mas não consigo avançar pq não consigo usar classes no meu código..Entendeu?

     

    Abraço Israel e Obrigado por continuar me ajudando..

     

    Wednesday, September 12, 2007 2:01 PM
  • Israel.

     

    Você não acha que é algo do servidor?

     

    Se eu criar uma área de publicação com uma senha ftp, você ou alguém não fariam um teste para ver esta questão da classe?

     

    Abraço

     

    Wednesday, September 12, 2007 5:33 PM
  • e ai pessoal?

    Thursday, September 13, 2007 11:50 AM
  • DESCOBRI!!! hehehe..

     

    Bem obviamente o que o Israel falou que para uma classe funcionar é preciso publicar o site está totalmente certo.

     

    Então vamos por partes:

     

    COMO PUBLICAR UM SITE com o visual studio 2005:

     

    - Vá no menu Build;

    - Clique em Build Web Site;

    - Verifique se não deu erros, se não abrir a janela automáticamente vá em View>Error List;

    - Estando limpo os erros vá em Build e clique em Public Web Site;

    - Escolha a pasta que vai salvar e aperte OK;

     

    Como testar o site.

    - Antes de mais nada quero ressaltar que o asp.net é diferente do ASP portanto para publicar  um site, você deve ter um site ou ter um diretório virtual caso o sistema fique dentro de um site.

    - crie o diretório Virtual;

    - publique os arquivos gerados e pode testar.

     

     

    Meu problema neste tópico é que além de não saber publicar eu não tinha criado diretório virtual.

     

    Abraço a todos espero ter ajudado...

     

    Wednesday, September 19, 2007 2:27 PM