web-dev-qa-db-fra.com

Lecture des valeurs int à partir de SqlDataReader

salut quelqu'un peut-il m'aider s'il vous plaît avec cette extraction de la base de données de valeurs int im ayant du mal à récupérer des valeurs int, cela fonctionne pour varchar mais pas d'int quelqu'un peut m'aider s'il vous plaît 

if (int.TryParse(TxtFarmerCode.Text, out intValue))
{
   using (SqlConnection sqlConn = new SqlConnection("Data Source=TANYA-PC;Initial Catalog=biore1;Integrated Security=True")) //here goes connStrng or the variable of it
   {
      sqlConn.Open();
      string sqlQuery = @"SELECT farmername,villagename,gender,farmsize FROM cottonpurchase WHERE farmercode = @code";

      using (SqlCommand cmd = new SqlCommand(sqlQuery, sqlConn))
      {
         cmd.Parameters.Add("@code", SqlDbType.Int).Value = intValue;
         using (SqlDataReader reader = cmd.ExecuteReader())
         {;
            if (reader.Read())
            {
               TxtFarmerName.Text = (string)reader[0];
               TxtVillageName.Text = (string)reader[1];
               TxtGender.Text = (string)reader[2];
            }
            else
               MessageBox.Show("For Farmer Code " + intValue.ToString() + " there is no farmer in the database.");
         }
      }
   }
}

je veux aller chercher txtfarmersize qui est int mais je ne sais pas comment le faire s'il vous plaît aidez-moi?

22
tanya

vous pouvez utiliser 

reader.GetInt32(3);

lire un int de 32 bits à partir du lecteur de données.

Si vous connaissez le type de vos données, il est préférable de lire à l'aide des méthodes Get* qui sont fortement typées plutôt que de simplement lire un objet et le transtypage.

Avez-vous envisagé d'utiliser 

reader.GetInt32(reader.GetOrdinal(columnName)) 

plutôt que d'accéder par position. Cela rend votre code moins fragile et ne se cassera pas si vous modifiez la requête pour ajouter de nouvelles colonnes avant celles existantes. Si vous voulez le faire en boucle, mettez d'abord l'ordinal en cache.

49
Sam Holder

Cela devrait fonctionner:

txtfarmersize = Convert.ToInt32(reader["farmsize"]);
14
BrokenGlass

Utilisez la méthode GetInt.

reader.GetInt32(3);
6
Jan Christian Selke

Appelez ToString() au lieu de lancer le résultat du lecteur.

reader[0].ToString();
reader[1].ToString();
// etc...

Et si vous voulez récupérer des valeurs de type de données spécifiques (int dans votre cas), essayez ce qui suit:

reader.GetInt32(index);
2
as-cii
TxtFarmerSize.Text = (int)reader[3];

sur la base de la réponse de Sam Holder, vous pourriez faire une méthode d'extension pour cette

namespace adonet.extensions
{
  public static class AdonetExt
  {
    public static int GetInt32(this SqlDataReader reader, string columnName)
    {
      return reader.GetInt32(reader.GetOrdinal(columnName));
    }
  }
}

et l'utiliser comme ça

using adonet.extensions;

//...

int farmsize = reader.GetInt32("farmsize");

en supposant qu'il n'y ait pas de GetInt32 (chaîne) déjà dans SqlDataReader - le cas échéant, utilisez simplement un autre nom de méthode

0
George Birbilis