如果不应该将整数返回为0。取自数据库

时间:2017-04-24 14:21:48

标签: c# asp.net database

我正在尝试从我的数据库中获取一个值,但它一直返回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();
       }

2 个答案:

答案 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
}