Подтвердить что ты не робот

Чтение значений int из SqlDataReader

Привет, кто-нибудь может помочь мне с этой выборкой из базы данных значений int im, имеющих трудности с получением значений 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, но не знает, как это сделать, пожалуйста, помогите мне?

4b9b3361

Ответ 1

вы можете использовать

reader.GetInt32(3);

для чтения 32-битного int из устройства чтения данных.

Если вы знаете тип своих данных, я думаю, что его лучше читать с помощью методов Get*, которые строго типизируются, а не просто читать объект и кастинг.

Рассматривали ли вы использование

reader.GetInt32(reader.GetOrdinal(columnName)) 

вместо доступа по позиции. Это делает ваш код менее хрупким и не сломается, если вы измените запрос на добавление новых столбцов до существующих. Если вы собираетесь сделать это в цикле, сначала оставьте порядковый номер.

Ответ 2

Это должно работать:

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

Ответ 3

Используйте метод GetInt.

reader.GetInt32(3);

Ответ 4

Вызовите ToString() вместо того, чтобы отличать результат чтения.

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

И если вы хотите получить определенные значения типа данных (int в вашем случае), попробуйте следующее:

reader.GetInt32(index);

Ответ 5

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

Ответ 6

основываясь на ответе Сэма Холдера, вы можете сделать метод расширения для этого

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 (строка) - если есть, просто вместо этого используйте другое имя метода