从SqlDataReader读取int值

本文关键字:int 读取 SqlDataReader | 更新日期: 2023-09-27 18:08:15

嗨,谁能帮我从数据库中获取int值我在获取int值有困难,它适用于varchar,但不是int可以有人帮助我,请

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

我想取txtfarmersize这是int,但不知道怎么做,请帮助我?

从SqlDataReader读取int值

可以使用

reader.GetInt32(3);

从数据读取器读取32位整型数据。

如果你知道你的数据类型,我认为最好使用强类型的Get*方法来读取,而不是仅仅读取一个对象并进行类型转换。

是否考虑过使用

reader.GetInt32(reader.GetOrdinal(columnName)) 

而不是按位置访问。这使您的代码不那么脆弱,并且在更改查询以在现有列之前添加新列时不会中断。如果要在循环中执行此操作,请先缓存序号。

应该可以:

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

使用GetInt方法

reader.GetInt32(3);

根据Sam Holder的回答,您可以为该

创建一个扩展方法。
namespace adonet.extensions
{
  public static class AdonetExt
  {
    public static int GetInt32(this SqlDataReader reader, string columnName)
    {
      return reader.GetInt32(reader.GetOrdinal(columnName));
    }
  }
}

并像这样使用

using adonet.extensions;
//...
int farmsize = reader.GetInt32("farmsize");

假设SqlDataReader中没有GetInt32(string),如果有,请使用其他方法名代替

调用ToString()而不是强制转换reader的结果。

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

如果你想获取特定的数据类型值(int在你的情况下)尝试以下操作:

reader.GetInt32(index);
TxtFarmerSize.Text = (int)reader[3];