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?
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.
Cela devrait fonctionner:
txtfarmersize = Convert.ToInt32(reader["farmsize"]);
Utilisez la méthode GetInt.
reader.GetInt32(3);
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);
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