it-swarm.it

Lettura dei valori int da SqlDataReader

ciao qualcuno può aiutarmi con questo recupero dal database di valori int in difficoltà nel recupero di valori int, funziona per varchar ma non int qualcuno mi può aiutare per favore 

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.");
         }
      }
   }
}

voglio recuperare txtfarmersize che è int ma non so come farlo per favore aiutatemi?

22
tanya

puoi usare 

reader.GetInt32(3);

leggere un int a 32 bit dal lettore di dati.

Se conosci il tipo dei tuoi dati, penso che sia meglio leggere usando i metodi Get* che sono fortemente tipizzati piuttosto che semplicemente leggendo un oggetto e il casting.

Hai preso in considerazione l'utilizzo 

reader.GetInt32(reader.GetOrdinal(columnName)) 

piuttosto che accedere per posizione. Ciò rende il tuo codice meno fragile e non si interromperà se cambi la query per aggiungere nuove colonne prima di quelle esistenti. Se hai intenzione di fare questo in un ciclo, salva prima l'ordinale.

49
Sam Holder

Questo dovrebbe funzionare:

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

Utilizza il metodo GetInt.

reader.GetInt32(3);
6

Chiama ToString() invece di trasmettere il risultato del lettore.

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

E se vuoi recuperare specifici valori del tipo di dati (int nel tuo caso) prova quanto segue:

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

in base alla risposta di Sam Holder, potresti fare un metodo di estensione per questo

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

e usalo in questo modo

using adonet.extensions;

//...

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

supponendo che non ci sia GetInt32 (stringa) già in SqlDataReader - se ce ne sono, basta usare qualche altro nome di metodo

0
George Birbilis