none
SQLDataReader RRS feed

  • Discussão Geral

  • Pessoal,

    Tenho um datareader que varre toda uma planilha excel.
    No entanto dentro dela, quero ter um outro datareader pra gerar um update no banco SQL.
    Acontece que ele me fala q ja tenho uma conexao aberta com datareader, mas nao posso fechar a 1a ja que ela esta varrendo a planilha.

    Como faco entao pra executar isso ?
    Alem disso, no update é aconselhavel usar ExecuteNonQuery, mas esta retornando erro. Pq ?

    Segue o codigo:

    string _connectionString = ConfigurationManager.ConnectionStrings["str"].ConnectionString;
    SqlConnection con = new SqlConnection(_connectionString);
    SqlCommand cmd = new SqlCommand("Select * from Usuarios", con);
    cmd.CommandType = CommandType.Text;

    using (con)
            {
                con.Open();
                SqlDataReader reader = cmd.ExecuteReader();
                string email;
                DateTime expiracao;

                while (reader.Read())
                {
                    if (reader["Email"] != DBNull.Value) { email = (string)reader["Email"]; } else { email = ""; }
                    if (reader["EXPIRES"] != DBNull.Value) { expiracao = (DateTime)reader["EXPIRES"]; } else { expiracao = Convert.ToDateTime("1980-01-01"); }

                    if (email != "")
                    {
                        try
                        {

                            SqlCommand comando1 = new SqlCommand("Update Migracao set member = 'Yes' where email = " + email, con);
                            SqlCommand comando2 = new SqlCommand("Update Migracao set member = " + expiracao, con);
                            SqlDataReader dr1 = comando1.ExecuteNonQuery();
                            SqlDataReader dr2 = comando2.ExecuteReader();
                            dr1.Close();
                            dr2.Close();
                        }

    • Movido Ari C. Raimundo sexta-feira, 12 de novembro de 2010 20:31 Movido para fórum apropriado (De:.NET Development - Geral)
    • Tipo Alterado AndreAlvesLimaModerator quinta-feira, 6 de janeiro de 2011 11:49
    sexta-feira, 12 de novembro de 2010 20:07

Todas as Respostas

  • Gabriel,

    Estou movendo a sua thread para o fórum de .NET/ADO. Da próxima vez poste a sua pergunta nesse fórum.

    Att.

    Ari C. Raimundo
    MCAD, MCTS
    http://araimundo.blogspot.com

    sexta-feira, 12 de novembro de 2010 20:34
  • Faz com dataset. Carrega no teu dataset a sua panilha e varre. Nao e aconselhavel deixar a conecao aberta. 

    if (dataset.Tables[0].Rows[0]["FistrName"]!=DBNull.Value)

     


    Just Be Humble Malange!
    sexta-feira, 12 de novembro de 2010 21:07
  • Olá,

    É possivel utilizar ler um DataReader dentro de outro usando MARS (Multiple Active Result Sets), o Mars deve ser habilitado na string de conexão para que você possa usar DataReader Aninhados:

     

    Exemplo de string de conex~!ao com MARS habilitado:

     

     

    "Data Source=MSSQL1;Initial Catalog=AdventureWorks;Integrated Security=SSPI;MultipleActiveResultSets=True"

     

    Repare que para habilitar o uso de MARS a linha abaixo teve de ser inserida na string de conexão:

     

     

    MultipleActiveResultSets=True"

     

     

    Abaixo um exemplo de uso do Mars:

    http://msdn.microsoft.com/en-us/library/yf1a7f4f(v=VS.80).aspx

    No exemplo acima você poderá ver a utilização de dois dataReaders (vendorReader e productReader), onde um está sendo lido dentro do outro.

     

    Espero ter ajudado



    Se o post foi útil marque como resposta. - Advanced Web Application - MCP - Twitter: @mpghelli
    sábado, 13 de novembro de 2010 17:52
  • Utilizando isso eu perco em performance ?

    Neto

    segunda-feira, 15 de novembro de 2010 23:17
  • Utilizando isso eu perco em performance ?

    Neto

    Tnes melhor performance se voce usar dataset ou datatable,

     


    Just Be Humble Malange!
    terça-feira, 16 de novembro de 2010 01:02
  • Definitivamente não concordo com a afirmação que diz que DataSet é mais rápido que o DataReader.

    Pelo contrário o DataSet é mais pesado que o DataReader pelos seguintes motivos:

    _Mantém os registros em memória enquanto o DataSet estiver ativo, ao contrário do Reader que é eliminado da memória após sua leitura.
    _O DataSet pode ser lido e relido em diversas direções já o DataReader é forward only ou seja, pode ser lido uma única vez.
    _O DataSet deve ter todas as suas linha preenchidas para que você possa manipular seu conteudo, já o DataReader a medida que cada linha é lida você já pode usar os dados retornados neste linha.

    Trabalhei com diversos sistemas utilizando DataSet e DataReader, e posso te garantir que o DataReader sempre teve um melhor desempenho.

    Porém o DataSet não deve ser descartado, ele é sim muito útil, mas para alguns cenários especificos, em que por exemplo deve-se manter os dados de forma desconectada. Exemplo: Um corretor de seguros que efetua a venda dos planos sem nenhum acesso a internet, este sistema deveria manter os dados do pedidos feitos pelo corretor até no fim do dia quando ele liga o computador a internet para trasmitir estes dados. (Para este tipo de cenário vale a pena usar DataSets)

    Abaixo alguns links que fazem justamente esta comparação entre perfomance entre DataSets e DataReader:

    http://www.webmastersonline.com.br/viewtopic.php?f=1&t=88

    http://www.devmedia.com.br/forum/viewtopic.asp?id=135038

    http://brunobemfica.net/?p=433

    http://articles.sitepoint.com/article/dataset-datareader

    Ou seja, quando o assunto é perfomance, SEM DÚVIDA NENHUMA o DataReader será a melhor opção, porém existem funcionalidades que o DataSet fornece que o DataReader não fornece, como por exemplo trabalhar com os dados de forma desconectada.

    Atenciosamente


    Se o post foi útil marque como resposta. - Advanced Web Application - MCP - Twitter: @mpghelli
    terça-feira, 16 de novembro de 2010 15:40
  • Definitivamente não concordo com a afirmação que diz que DataSet é mais rápido que o DataReader.

    Pelo contrário o DataSet é mais pesado que o DataReader pelos seguintes motivos:

    _Mantém os registros em memória enquanto o DataSet estiver ativo, ao contrário do Reader que é eliminado da memória após sua leitura.
    _O DataSet pode ser lido e relido em diversas direções já o DataReader é forward only ou seja, pode ser lido uma única vez.
    _O DataSet deve ter todas as suas linha preenchidas para que você possa manipular seu conteudo, já o DataReader a medida que cada linha é lida você já pode usar os dados retornados neste linha.

    Trabalhei com diversos sistemas utilizando DataSet e DataReader, e posso te garantir que o DataReader sempre teve um melhor desempenho.

    Porém o DataSet não deve ser descartado, ele é sim muito útil, mas para alguns cenários especificos, em que por exemplo deve-se manter os dados de forma desconectada. Exemplo: Um corretor de seguros que efetua a venda dos planos sem nenhum acesso a internet, este sistema deveria manter os dados do pedidos feitos pelo corretor até no fim do dia quando ele liga o computador a internet para trasmitir estes dados. (Para este tipo de cenário vale a pena usar DataSets)

    Abaixo alguns links que fazem justamente esta comparação entre perfomance entre DataSets e DataReader:

    http://www.webmastersonline.com.br/viewtopic.php?f=1&t=88

    http://www.devmedia.com.br/forum/viewtopic.asp?id=135038

    http://brunobemfica.net/?p=433

    http://articles.sitepoint.com/article/dataset-datareader

    Ou seja, quando o assunto é perfomance, SEM DÚVIDA NENHUMA o DataReader será a melhor opção, porém existem funcionalidades que o DataSet fornece que o DataReader não fornece, como por exemplo trabalhar com os dados de forma desconectada.

    Atenciosamente


    Se o post foi útil marque como resposta. - Advanced Web Application - MCP - Twitter: @mpghelli
    http://www.builderau.com.au/architect/database/soa/Which-is-best-for-you-DataReader-or-DataSet-/0,339024547,320278366,00.htm
    Just Be Humble Malange!
    quarta-feira, 17 de novembro de 2010 17:01
  • Definitivamente não concordo com a afirmação que diz que DataSet é mais rápido que o DataReader.

    Pelo contrário o DataSet é mais pesado que o DataReader pelos seguintes motivos:

    _Mantém os registros em memória enquanto o DataSet estiver ativo, ao contrário do Reader que é eliminado da memória após sua leitura.
    _O DataSet pode ser lido e relido em diversas direções já o DataReader é forward only ou seja, pode ser lido uma única vez.
    _O DataSet deve ter todas as suas linha preenchidas para que você possa manipular seu conteudo, já o DataReader a medida que cada linha é lida você já pode usar os dados retornados neste linha.

    Trabalhei com diversos sistemas utilizando DataSet e DataReader, e posso te garantir que o DataReader sempre teve um melhor desempenho.

    Porém o DataSet não deve ser descartado, ele é sim muito útil, mas para alguns cenários especificos, em que por exemplo deve-se manter os dados de forma desconectada. Exemplo: Um corretor de seguros que efetua a venda dos planos sem nenhum acesso a internet, este sistema deveria manter os dados do pedidos feitos pelo corretor até no fim do dia quando ele liga o computador a internet para trasmitir estes dados. (Para este tipo de cenário vale a pena usar DataSets)

    Abaixo alguns links que fazem justamente esta comparação entre perfomance entre DataSets e DataReader:

    http://www.webmastersonline.com.br/viewtopic.php?f=1&t=88

    http://www.devmedia.com.br/forum/viewtopic.asp?id=135038

    http://brunobemfica.net/?p=433

    http://articles.sitepoint.com/article/dataset-datareader

    Ou seja, quando o assunto é perfomance, SEM DÚVIDA NENHUMA o DataReader será a melhor opção, porém existem funcionalidades que o DataSet fornece que o DataReader não fornece, como por exemplo trabalhar com os dados de forma desconectada.

    Atenciosamente


    Se o post foi útil marque como resposta. - Advanced Web Application - MCP - Twitter: @mpghelli
    http://www.builderau.com.au/architect/database/soa/Which-is-best-for-you-DataReader-or-DataSet-/0,339024547,320278366,00.htm
    Just Be Humble Malange!

    Olá,

    No link citado o unico beneficio de perfomance com relação ao Data Set citado é:


    "The DataSet is a better choice when the data does not change frequently enough to warrant always retrieving it from the database or is specific to the user requesting the data. A DataSet can be stored in Session or Application variables or cached through the System.Web.Caching.Cache class to improve application performance by not having to retrieve the data from the database each time it is needed"

    Gostaria de destacar a seguinte parte

    The DataSet is a better choice when the data does not change frequently

    Ou seja ele diz que o DataSet é a melhor escolha quando os dados não são frequentemente alterados, onde eu posso jogar os valores em Cache, eu concordo, mas a maioria dos cenários de acesso a banco de dados, os dados mudam constantemente.

    Assim como no link que demonstrado no link que você enviou, concordo que tanto o DataSet quanto o DataReader tem suas aplicabilidades, ou seja, existem momentos que é melhor utilizar um e há momentos que é melhor utilizar o outro de acordo com o cenário, e nenhum deve ser descartado, porém na minha opinião em um cenário básico de acesso a dados, por exemplo preenchimento de um DataGrid, é mais rápido com o DataReader do que com o DataSet.

    Atenciosamente


    Se o post foi útil marque como resposta. - Advanced Web Application - MCP - Twitter: @mpghelli
    quinta-feira, 18 de novembro de 2010 15:01
  • Olá,

    Caso seu problema tenha sido resolvido, favor marcar como resposta os posts que lhe ajudaram a resolver o problema, pois isto facilita aos demais usuários do forúm a encontrarem as informações procuradas.

    Caso ainda o problema ainda não tenha sido resolvido, você pode identificar o que não está dando certo para que possamos respondê-lo?

    Obrigado


    Se o post foi útil marque como resposta. - Advanced Web Application - MCP - Twitter: @mpghelli
    quinta-feira, 25 de novembro de 2010 16:32
  • Prezados colegas,

    Afirmar que o Datareader é sempre melhor em se tratando de performance é um engano. Isso realmente depende de muitos fatores. Um artigo muito bom sobre isso e que vale a pena ler:

    DataReaders, DataSets, and performance
    By Peter A. Bromberg, Ph.D.

    http://www.eggheadcafe.com/articles/20030205.asp

     

    sexta-feira, 26 de novembro de 2010 11:17