Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. Database & SysAdmin
  3. Database
  4. read & update using reader

read & update using reader

Scheduled Pinned Locked Moved Database
databasequestionsharepointtutorialannouncement
34 Posts 15 Posters 0 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • P PIEBALDconsult

    If you use stored procedures (and you shouldn't), don't prefix the names with "sp"[^]. When I implement a system like that, sending email or whatever, I put a Status field in the table to indicate ( 0=New , 1=Sending , 2=Sent ). When I select the New rows, I also set the Status to Sending, then when I'm done I set the Sending rows to Sent. "UPDATE Email SET Status=1 WHERE Status=0 ; SELECT * FROM Email WHERE Status=1" Send the emails. "UPDATE Email SET Status=2 WHERE Status=1"

    M Offline
    M Offline
    Mycroft Holmes
    wrote on last edited by
    #8

    PIEBALDconsult wrote:

    If you use stored procedures (and you shouldn't),

    Do you want to clarify that statement.

    Never underestimate the power of human stupidity RAH

    P M 2 Replies Last reply
    0
    • M Mycroft Holmes

      PIEBALDconsult wrote:

      If you use stored procedures (and you shouldn't),

      Do you want to clarify that statement.

      Never underestimate the power of human stupidity RAH

      P Offline
      P Offline
      PIEBALDconsult
      wrote on last edited by
      #9

      Nah, not so soon after the last time. I'll just opine that that particular poster probably shouldn't. :-D

      1 Reply Last reply
      0
      • N Not Active

        RaviRanjankr wrote:

        what extra I have to mention here

        :wtf: You provide enough to answer the question that was asked. :rolleyes: Take some time to read other responses around the forums and learn.


        I know the language. I've read a book. - _Madmatt

        R Offline
        R Offline
        RaviRanjanKr
        wrote on last edited by
        #10

        Thanks for your support and nice idea. :-D

        1 Reply Last reply
        0
        • P PIEBALDconsult

          If you use stored procedures (and you shouldn't), don't prefix the names with "sp"[^]. When I implement a system like that, sending email or whatever, I put a Status field in the table to indicate ( 0=New , 1=Sending , 2=Sent ). When I select the New rows, I also set the Status to Sending, then when I'm done I set the Sending rows to Sent. "UPDATE Email SET Status=1 WHERE Status=0 ; SELECT * FROM Email WHERE Status=1" Send the emails. "UPDATE Email SET Status=2 WHERE Status=1"

          J Offline
          J Offline
          Jassim Rahma
          wrote on last edited by
          #11

          When I implement a system like that, sending email or whatever, I put a Status field in the table to indicate ( 0=New , 1=Sending , 2=Sent ). When I select the New rows, I also set the Status to Sending, then when I'm done I set the Sending rows to Sent.

          "UPDATE Email SET Status=1 WHERE Status=0 ; SELECT * FROM Email WHERE Status=1"

          Send the emails.

          "UPDATE Email SET Status=2 WHERE Status=1"

          yup but my question, is I am reading the pending SMSs using sql_reader1 then how can I execute the update status code? can I do it using the same sql_reader? it won't allow braces the sql reader is still open! should I have sql_reader1 for reading the pending sms and within the while (sql_reader1.Read()) I will have sql_reader2? please advise..

          P M P 3 Replies Last reply
          0
          • J Jassim Rahma

            When I implement a system like that, sending email or whatever, I put a Status field in the table to indicate ( 0=New , 1=Sending , 2=Sent ). When I select the New rows, I also set the Status to Sending, then when I'm done I set the Sending rows to Sent.

            "UPDATE Email SET Status=1 WHERE Status=0 ; SELECT * FROM Email WHERE Status=1"

            Send the emails.

            "UPDATE Email SET Status=2 WHERE Status=1"

            yup but my question, is I am reading the pending SMSs using sql_reader1 then how can I execute the update status code? can I do it using the same sql_reader? it won't allow braces the sql reader is still open! should I have sql_reader1 for reading the pending sms and within the while (sql_reader1.Read()) I will have sql_reader2? please advise..

            P Offline
            P Offline
            PIEBALDconsult
            wrote on last edited by
            #12

            You can do it that way (you have a unique ID, yes?), but you'll need a second Connection as well. There are times you need to do that.

            1 Reply Last reply
            0
            • R RaviRanjanKr

              jrahma wrote:

              after reading I want to update every record when send to set the field is_sent to True? how can i do this? do I have to create another reader in the middle? can you please guide..

              A little bit confusing about your question whatever, In case of save,update and delete you need to execute Transact SQL statement against connection. :)

              modified on Sunday, December 12, 2010 10:17 AM

              S Offline
              S Offline
              ShilpaKumari
              wrote on last edited by
              #13

              Good sot, You need to elobrate it how they achieve

              1 Reply Last reply
              0
              • J Jassim Rahma

                When I implement a system like that, sending email or whatever, I put a Status field in the table to indicate ( 0=New , 1=Sending , 2=Sent ). When I select the New rows, I also set the Status to Sending, then when I'm done I set the Sending rows to Sent.

                "UPDATE Email SET Status=1 WHERE Status=0 ; SELECT * FROM Email WHERE Status=1"

                Send the emails.

                "UPDATE Email SET Status=2 WHERE Status=1"

                yup but my question, is I am reading the pending SMSs using sql_reader1 then how can I execute the update status code? can I do it using the same sql_reader? it won't allow braces the sql reader is still open! should I have sql_reader1 for reading the pending sms and within the while (sql_reader1.Read()) I will have sql_reader2? please advise..

                M Offline
                M Offline
                Mycroft Holmes
                wrote on last edited by
                #14

                jrahma wrote:

                using sql_reader1

                I have never understood the reason so many devs use the reader, sure it is he most economic way to process data but the limitations are irritating. I ALWAYS get the data, all the data into a datatable/List<>, this frees up the connection, then I process the datatable. If the data set is too large then I get the data to process in chunks.

                Never underestimate the power of human stupidity RAH

                P 1 Reply Last reply
                0
                • J Jassim Rahma

                  When I implement a system like that, sending email or whatever, I put a Status field in the table to indicate ( 0=New , 1=Sending , 2=Sent ). When I select the New rows, I also set the Status to Sending, then when I'm done I set the Sending rows to Sent.

                  "UPDATE Email SET Status=1 WHERE Status=0 ; SELECT * FROM Email WHERE Status=1"

                  Send the emails.

                  "UPDATE Email SET Status=2 WHERE Status=1"

                  yup but my question, is I am reading the pending SMSs using sql_reader1 then how can I execute the update status code? can I do it using the same sql_reader? it won't allow braces the sql reader is still open! should I have sql_reader1 for reading the pending sms and within the while (sql_reader1.Read()) I will have sql_reader2? please advise..

                  P Offline
                  P Offline
                  Pete OHanlon
                  wrote on last edited by
                  #15

                  If you are trying to update a value and you are already using the connection for reading data, you need to look at using a MARS connection (that's Multiple Active Result Set). Add MultipleActiveResultSets=true; to your connection string.

                  I'm not a stalker, I just know things. Oh by the way, you're out of milk.

                  Forgive your enemies - it messes with their heads

                  My blog | My articles | MoXAML PowerToys | Onyx

                  P 1 Reply Last reply
                  0
                  • P Pete OHanlon

                    If you are trying to update a value and you are already using the connection for reading data, you need to look at using a MARS connection (that's Multiple Active Result Set). Add MultipleActiveResultSets=true; to your connection string.

                    I'm not a stalker, I just know things. Oh by the way, you're out of milk.

                    Forgive your enemies - it messes with their heads

                    My blog | My articles | MoXAML PowerToys | Onyx

                    P Offline
                    P Offline
                    PIEBALDconsult
                    wrote on last edited by
                    #16

                    With MySQL?

                    1 Reply Last reply
                    0
                    • M Mycroft Holmes

                      jrahma wrote:

                      using sql_reader1

                      I have never understood the reason so many devs use the reader, sure it is he most economic way to process data but the limitations are irritating. I ALWAYS get the data, all the data into a datatable/List<>, this frees up the connection, then I process the datatable. If the data set is too large then I get the data to process in chunks.

                      Never underestimate the power of human stupidity RAH

                      P Offline
                      P Offline
                      PIEBALDconsult
                      wrote on last edited by
                      #17

                      I have never understood the reason so many devs use the DataAdapter and load a whole butt-load of data at once when they don't use it all at once. Certainly, when I want to load a ListBox or something, I use a DataTable (loaded straight from a DataReader), but mostly I use only one record at a time -- to export or copy somewhere or update something. For what I do, I doubt the connection stays open significantly longer, but it sure saves on RAM and class instantiations. Bear in mind that I generally write Windows Services that cycle every ten to fifteen seconds, and not generally GUI apps that spend a lot of time just sitting there displaying a bunch of out-dated data. And when I do write a WinForms app that displays a butt-load of data, I often use a Service to create an (XML) export that the clients read, rather than have all the clients constantly clambering for database connections.

                      M F 2 Replies Last reply
                      0
                      • P PIEBALDconsult

                        I have never understood the reason so many devs use the DataAdapter and load a whole butt-load of data at once when they don't use it all at once. Certainly, when I want to load a ListBox or something, I use a DataTable (loaded straight from a DataReader), but mostly I use only one record at a time -- to export or copy somewhere or update something. For what I do, I doubt the connection stays open significantly longer, but it sure saves on RAM and class instantiations. Bear in mind that I generally write Windows Services that cycle every ten to fifteen seconds, and not generally GUI apps that spend a lot of time just sitting there displaying a bunch of out-dated data. And when I do write a WinForms app that displays a butt-load of data, I often use a Service to create an (XML) export that the clients read, rather than have all the clients constantly clambering for database connections.

                        M Offline
                        M Offline
                        Mycroft Holmes
                        wrote on last edited by
                        #18

                        PIEBALDconsult wrote:

                        I generally write Windows Services that cycle every ten to fifteen seconds

                        Well I do write user apps that have the (outdated) data sitting in front of the user, with move to WCF we use observablecollections serviced to the UI. I suppose we could use the reader instead of the adapter, it is just a habit from the winforms when we used to datatable as the bindingsource to the grids.

                        Never underestimate the power of human stupidity RAH

                        P 1 Reply Last reply
                        0
                        • M Mycroft Holmes

                          PIEBALDconsult wrote:

                          I generally write Windows Services that cycle every ten to fifteen seconds

                          Well I do write user apps that have the (outdated) data sitting in front of the user, with move to WCF we use observablecollections serviced to the UI. I suppose we could use the reader instead of the adapter, it is just a habit from the winforms when we used to datatable as the bindingsource to the grids.

                          Never underestimate the power of human stupidity RAH

                          P Offline
                          P Offline
                          PIEBALDconsult
                          wrote on last edited by
                          #19

                          Mycroft Holmes wrote:

                          grids

                          X| Wash your mouth out with tequila; you're better than that.

                          M 1 Reply Last reply
                          0
                          • P PIEBALDconsult

                            Mycroft Holmes wrote:

                            grids

                            X| Wash your mouth out with tequila; you're better than that.

                            M Offline
                            M Offline
                            Mycroft Holmes
                            wrote on last edited by
                            #20

                            In this context a grid is a generic term for a collection control and with winforms I was always happy to bind a datatable to a datagirdview, the datatable is disconnected afterall. The cost of the datatable has always been irrelevant to the functionality that it brings. Then we were told to use services and I decided the UI should be silverlight so everything changed, now it's Oracle databases, WCF, observablecollections, viewmodels and xaml. Did I say I hate (relearning) Oracle.

                            Never underestimate the power of human stupidity RAH

                            P 1 Reply Last reply
                            0
                            • M Mycroft Holmes

                              In this context a grid is a generic term for a collection control and with winforms I was always happy to bind a datatable to a datagirdview, the datatable is disconnected afterall. The cost of the datatable has always been irrelevant to the functionality that it brings. Then we were told to use services and I decided the UI should be silverlight so everything changed, now it's Oracle databases, WCF, observablecollections, viewmodels and xaml. Did I say I hate (relearning) Oracle.

                              Never underestimate the power of human stupidity RAH

                              P Offline
                              P Offline
                              PIEBALDconsult
                              wrote on last edited by
                              #21

                              Mycroft Holmes wrote:

                              (relearning) Oracle.

                              But not in C with Pro*C I bet.

                              1 Reply Last reply
                              0
                              • R RaviRanjanKr

                                Mark Nischalke wrote:

                                how does this answer the question?

                                :doh: Ok its my fault but can you explain what extra I have to mention here.

                                M Offline
                                M Offline
                                MDNadeemAkhter
                                wrote on last edited by
                                #22

                                :-D

                                1 Reply Last reply
                                0
                                • J Jassim Rahma

                                  I have the following to read from database: sql_connection = new MySqlConnection(ConfigurationManager.ConnectionStrings["SQLdb"].ConnectionString); sql_connection.Open(); sql_command = new MySqlCommand("sp_send_pending_sms", sql_connection); sql_command.CommandType = CommandType.StoredProcedure; sql_reader = sql_command.ExecuteReader(); after reading I want to update every record when send to set the field is_sent to True? how can i do this? do I have to create another reader in the middle? can you please guide.. Thanks

                                  B Offline
                                  B Offline
                                  Brady Kelly
                                  wrote on last edited by
                                  #23

                                  It is maybe neater to not use a reader, but rather a DataTable and a TableAdapter. Then you can loop through the table rows, update the is_sent on each row as you process it, and then call Update. Something like this:

                                  using (var ad = new SqlDataAdapter("sp\_send\_pending\_sms", ConfigurationManager.ConnectionStrings\["SQLdb"\].ConnectionString))
                                  {
                                      ad.SelectCommand.CommandType = CommandType.StoredProcedure;
                                      var dt = new DataTable();
                                      ad.Fill(dt);
                                  
                                      // blah blah blah. do your work.
                                      ad.AcceptChangesDuringUpdate = true;
                                      ad.Update(dt);
                                  }
                                  

                                  If the list is long, you may want to call Update every n rows, not just at the end.

                                  1 Reply Last reply
                                  0
                                  • J Jassim Rahma

                                    I have the following to read from database: sql_connection = new MySqlConnection(ConfigurationManager.ConnectionStrings["SQLdb"].ConnectionString); sql_connection.Open(); sql_command = new MySqlCommand("sp_send_pending_sms", sql_connection); sql_command.CommandType = CommandType.StoredProcedure; sql_reader = sql_command.ExecuteReader(); after reading I want to update every record when send to set the field is_sent to True? how can i do this? do I have to create another reader in the middle? can you please guide.. Thanks

                                    G Offline
                                    G Offline
                                    Gary Huck
                                    wrote on last edited by
                                    #24

                                    Yes, something like that is what you need. The ExecuteReader() method, as the name implies, is only for selecting (reading) data. p.s. Stored procedures are a great way to go!

                                    P 1 Reply Last reply
                                    0
                                    • P PIEBALDconsult

                                      If you use stored procedures (and you shouldn't), don't prefix the names with "sp"[^]. When I implement a system like that, sending email or whatever, I put a Status field in the table to indicate ( 0=New , 1=Sending , 2=Sent ). When I select the New rows, I also set the Status to Sending, then when I'm done I set the Sending rows to Sent. "UPDATE Email SET Status=1 WHERE Status=0 ; SELECT * FROM Email WHERE Status=1" Send the emails. "UPDATE Email SET Status=2 WHERE Status=1"

                                      G Offline
                                      G Offline
                                      Gary Huck
                                      wrote on last edited by
                                      #25

                                      Tell us why one should NOT use stored procedures, as you state.

                                      1 Reply Last reply
                                      0
                                      • P PIEBALDconsult

                                        I have never understood the reason so many devs use the DataAdapter and load a whole butt-load of data at once when they don't use it all at once. Certainly, when I want to load a ListBox or something, I use a DataTable (loaded straight from a DataReader), but mostly I use only one record at a time -- to export or copy somewhere or update something. For what I do, I doubt the connection stays open significantly longer, but it sure saves on RAM and class instantiations. Bear in mind that I generally write Windows Services that cycle every ten to fifteen seconds, and not generally GUI apps that spend a lot of time just sitting there displaying a bunch of out-dated data. And when I do write a WinForms app that displays a butt-load of data, I often use a Service to create an (XML) export that the clients read, rather than have all the clients constantly clambering for database connections.

                                        F Offline
                                        F Offline
                                        Fabio Franco
                                        wrote on last edited by
                                        #26

                                        PIEBALDconsult wrote:

                                        I have never understood the reason so many devs use the DataAdapter and load a whole butt-load of data at once when they don't use it all at once.

                                        When you know there will never be too much data and that it will not have impact on system resources and when you want to work with data in a disconected state. There are good uses for both approaches, that's why they exist. Beeing wise to use them where they fit is another story, can't speak for anyone.

                                        1 Reply Last reply
                                        0
                                        • J Jassim Rahma

                                          I have the following to read from database: sql_connection = new MySqlConnection(ConfigurationManager.ConnectionStrings["SQLdb"].ConnectionString); sql_connection.Open(); sql_command = new MySqlCommand("sp_send_pending_sms", sql_connection); sql_command.CommandType = CommandType.StoredProcedure; sql_reader = sql_command.ExecuteReader(); after reading I want to update every record when send to set the field is_sent to True? how can i do this? do I have to create another reader in the middle? can you please guide.. Thanks

                                          S Offline
                                          S Offline
                                          Spectre_001
                                          wrote on last edited by
                                          #27

                                          You can not update through a DataReader. It retreives a read-only, forward-only stream of data one record at a time. If I read your question correctly, you are doing some processing on each record after reading, then need to set a flag in the database to indicate that record has been processed. You will need a second connection and comand object for this. You can't use the same connection/command as the DataReader because it keeps it's connection open internally throughout it's lifetime. The best way to accomplish this will vary slightly depending on how many records you expect to process and whether the processing will run a long time (cumulative). For a relatively short run: 1. Open SQLConnection for updating and attach to SQLCommand 2. Read next record from DataReader 3. Perform needed processing 4. Generate update SQL for current record 5. Use SQLCommand to run update SQL 6. Repeat steps 2 - 5 until last record has been processed and updated 7. Close and destroy update SQLConnection/SQLCommand For a long run: 1. Create SQLConnection for updating and attach to SQLCommand 2. Read next record from DataReader 3. Perform needed processing 4. Generate update SQL for current record 5. Open SQLConnection for update 6. Use SQLCommand to run update SQL 7. Close SQLConnection 8. Repeat 2 - 7 until last record has been processed and updated 9. Close and destroy update SQLConnection/SQLCommand Hope this answers your question and helps out.

                                          Kevin Rucker, Application Programmer QSS Group, Inc. United States Coast Guard OSC Kevin.D.Rucker@uscg.mil "Programming is an art form that fights back." -- Chad Hower

                                          P 1 Reply Last reply
                                          0
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          • Login

                                          • Don't have an account? Register

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Categories
                                          • Recent
                                          • Tags
                                          • Popular
                                          • World
                                          • Users
                                          • Groups