SqlDataReader and SqlCommand

前端 未结 3 1082
感动是毒
感动是毒 2021-01-14 20:21

I have the following code.

using (SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings[\"ConnectionString\"].ConnectionString)         


        
3条回答
  •  温柔的废话
    2021-01-14 20:59

    An alternative is not add MultipleActiveResultSets=True - there is a small performance penalty for doing so - and so something like this:

    using (SqlConnection connection = new ...))
    {
       connection.Open();
       SqlCommand select = new SqlCommand(...);
    
       SqlDataReader reader = select.ExecuteReader();
    
       var toInactivate = new List();
    
       if (reader.HasRows)
       {
          while (reader.Read())
          {
             if (!currentPart.IsActive)
             {
                toInactivate.Add(reader["record"].ToString());
             }
             else
             {
                ///blah
             }
          }
    
          reader.Close();
       }
    
       SqlCommand update = new SqlCommand("UPDATE ... SET valid = 0, active = 0 " +
           "WHERE record IN(" + string.Join(",", toInactivate) +  ");", connection);
    
       update.ExecuteNonQuery();
    }
    

    which has the advantage of updating all the required records in a single SQL statement.

    And of course the whole thing would be so much neater using EF and Linq.

提交回复
热议问题