嗨,任何人都可以帮助我从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但不知道该怎么做请帮帮我?
答案 0 :(得分:51)
你可以使用
reader.GetInt32(3);
从数据读取器读取32位int。
如果您知道数据的类型,我认为最好使用强类型的Get*
方法阅读,而不仅仅是阅读对象和强制转换。
您是否考虑过使用
reader.GetInt32(reader.GetOrdinal(columnName))
而不是按位置访问。如果您更改查询以在现有列之前添加新列,这会使您的代码不那么脆弱并且不会中断。如果要在循环中执行此操作,请先缓存序号。
答案 1 :(得分:14)
这应该有效:
txtfarmersize = Convert.ToInt32(reader["farmsize"]);
答案 2 :(得分:6)
使用GetInt方法。
reader.GetInt32(3);
答案 3 :(得分:2)
致电ToString()
而非投出读者结果。
reader[0].ToString();
reader[1].ToString();
// etc...
如果您想获取特定数据类型值(在您的情况下为int
),请尝试以下操作:
reader.GetInt32(index);
答案 4 :(得分:1)
TxtFarmerSize.Text = (int)reader[3];
答案 5 :(得分:1)
根据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)-如果有的话,请改用其他方法名称