我正在尝试从我的数据库中获取一个值,但它一直返回0值,我无法弄清楚原因。我一直在从我的整个项目的数据库中检索数据,它只是在这里工作。数据库中的所有值都不是= 0。
int rentalPrice是0`
返回的那个 protected void Page_Load(object sender, EventArgs e)
{
if (Request.QueryString["id"] == null)
{
Response.Redirect("DisplayCars.aspx");
}
else
{
id = Convert.ToInt32(Request.QueryString["id"].ToString());
con.Open();
SqlCommand cmd = con.CreateCommand();
cmd.CommandType = CommandType.Text;
cmd.CommandText = "select * from cars where id ='" + id + "'";
cmd.ExecuteNonQuery();
lblCarID.Text = id.ToString();
DataTable dt2 = new DataTable();
SqlDataAdapter da2 = new SqlDataAdapter(cmd);
foreach (DataRow dr2 in dt2.Rows)
{
rentalPrice = Convert.ToInt32(dr2["car_rental_price"]);
}
lblRentalPrice.Text = rentalPrice.ToString();
con.Close();
}
答案 0 :(得分:2)
// This uses a Connection pool, so you don't need to reuse the same SqlConnection
using (SqlConnection con = new SqlConnection(...))
{
using (SqlCommand cmd = con.CreateCommand())
{
cmd.CommandType = CommandType.Text;
cmd.CommandText = "select [car_rental_price] from cars where id = @Id";
var idParam = new SqlParameter("@Id");
idParam.Value = id;
cmd.Parameters.Add(idParam);
con.Open();
using (var reader = cmd.ExcecuteReader())
{
reader.Read();
lblRentalPrice.Text = reader.GetInt32(0).ToString();
lblCarID.Text = id.ToString();}
}
}
}
要执行查询并获得结果,您需要使用cmd.ExecuteReader
。
此外,您需要使用参数化查询,而不是将值连接到字符串中以构建SQL查询。这有助于防止SQL注入攻击。
此外,不应将SqlConnection放入字段(类级变量)。相反,您应该使用局部变量并将它们包装在using
语句中,以确保它们被正确处理。
答案 1 :(得分:-2)
首先填写数据表并在Foreach循环中使用它
adapter.Fill(DataTable);
foreach(DataRow dr in DataTable)
{
//get the id
}