2017-04-24 67 views
0

我試圖從我的數據庫中獲得一個值,但它一直返回值爲0,我找不出原因。我一直從數據庫中檢索整個項目的數據,而這只是在這裏工作。在數據庫中的值都不是= 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(); 
     } 
+6

您正在使用'ExecuteNonQuery'。但是你試圖執行一個查詢。看看這怎麼沒有意義?你有沒有看過[ExecuteNonQuery](https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.executenonquery(v = vs.110).aspx)返回的文檔? – mason

+4

**警告:** fyi您正在詢問sql注入!!! –

+2

方面說明:爲什麼這行'Convert.ToInt32(Request.QueryString [「id」] .toString());'?您將'id'值作爲字符串添加到查詢中,但將其作爲字符串讀取,將其轉換爲int,然後將其作爲字符串添加並作爲varchar添加。真的,你應該使用參數化的sql,並且數據庫中的id應該是int類型的。 – Igor

回答

-2

嘿,你沒有填寫數據表..它再怎麼有什麼價值? ??

第一填充數據表,並用它在Foreach循環

adapter.Fill(DataTable); 
foreach(DataRow dr in DataTable) 
{ 
    //get the id 
} 
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聲明中,以確保它們得到妥善處置。

+0

我同意,但我沒辦法這麼做,因爲我沒有看到它的聲明。 :) –

相關問題