2016-11-23 65 views
0

這讓我瘋狂。從對象類型System.Web.UI.WebControls.ListItem到已知的託管提供程序本機類型不存在映射

沒有映射從對象類型存在System.Web.UI.WebControls.ListItem到已知託管提供天然型

當試圖通過插入件從一個列表框傳遞數據到一個數據庫之中,我得到這個錯誤。列表框中的數據也是從數據庫中提取的。 插入看起來是這樣的:

cmd.Parameters.AddWithValue("@driver",DriversJourney.SelectedItem.ToString()); 

我將selectedItem試了一下(),selectedValue.ToString())的selectedIndex,的SelectedValue。

public partial class FindDriver : System.Web.UI.Page 
{ 
    SqlConnection con = new SqlConnection(@"Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\RideShare.mdf;Integrated Security=True");//set connection as a variable 
    SqlCommand cmd = new SqlCommand(); 
    SqlDataReader dr; 


     protected void Page_Load(object sender, EventArgs e) 
     { 
       if (Session["username"] == null) 
        { 
         Response.Redirect("~/Account/FindDriver.aspx"); 
        } 

       else 
        { 
         labelWelcome.Text = "Welcome " + Session["UserName"] + "!".ToString(); 
        } 

     } 

protected void search(object sender, EventArgs e) 
    { 
     con.Open(); 
     cmd.Connection = con; 
     cmd.CommandText = "SELECT * FROM Driver WHERE City = '" + JourOrigin.SelectedItem + "' "; 
     dr = cmd.ExecuteReader(); 
     dr.Read(); 
     if (dr.HasRows) 
     { 
      Session["city"] = JourOrigin.SelectedItem.ToString(); 
      Response.Redirect("~/Account/FindDriver.aspx"); 
      NoCity.Visible = false; 

     } 
     else 
     { 
      DriversJourney.Items.Clear(); 
      DriversJourney.Items.Add("No Drivers in selected city, try another city"); 
      NoCity.Visible = true; 
      NoCity.Text = "No drivers in selected city, please try another city"; 
     } 
     con.Close(); 
    } 

protected void JourneyAdd_Click(object sender, EventArgs e) 
    { 
     using(SqlConnection connection = new SqlConnection(@"Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\RideShare.mdf;Integrated Security=True")) 
     { 


      SqlCommand cmd = new SqlCommand("INSERT INTO Journey(JourneyOrigin, JourneyDestination, Date, Time, PassengerUserName, DriverUserName) VALUES (@origin, @destination, @date, @time, @driver, @passenger)"); 
      cmd.CommandType = CommandType.Text; 
      cmd.Connection = connection; 
      cmd.Parameters.AddWithValue("@origin", JourOrigin.SelectedItem); 
      cmd.Parameters.AddWithValue("@destination", JourDestination.SelectedItem); 
      cmd.Parameters.AddWithValue("@date", Calendar.SelectedDate); 
      cmd.Parameters.AddWithValue("@time", date.SelectedItem); 
      cmd.Parameters.AddWithValue("@driver", DriversJourney.SelectedValue); 
      cmd.Parameters.AddWithValue("@passenger", Session["username"].ToString()); 
      connection.Open(); 

      cmd.ExecuteNonQuery(); 
      connection.Close(); 
     } 
    } 
+0

您的例外與您提供的代碼不符。包括整個調用堆棧。 – Zer0

+0

'SelectedItem'是一個項目,所以它不起作用。當你使用'DriversJourney.SelectedValue'時,你得到了什麼錯誤? @ Zer0:在這篇文章的標題中的錯誤是你會得到的異常[如果你試圖傳遞一個ListItem作爲參數](http://stackoverflow.com/questions/7095689/no-mapping-exists-from -object型系統的Web-UI-器WebControls-列表項到一個已知的)。 – Santi

+0

@Santi什麼?他在做'ToString()'。所以他傳遞一個不是'SelectedItem'的字符串。不知道你的意思。但我確實同意這是一個例外,說明我爲什麼會感到困惑。換句話說,代碼應該可以正常工作。我不相信這是例外的原因。 – Zer0

回答

2

這些代碼行是你的問題的一部分:

cmd.Parameters.AddWithValue("@origin", JourOrigin.SelectedItem); 
cmd.Parameters.AddWithValue("@destination", JourDestination.SelectedItem); 
cmd.Parameters.AddWithValue("@time", date.SelectedItem); 

請它們轉換成正確的類型或使用SelectedValue

這個例外是告訴你,你正在爲ListItem類型的對象設置一個參數,並且你不可能將它插入到數據庫中。

拋出異常時(在附帶調試器的情況下)中斷,並查看Parameters集合,確保它們的值具有正確的類型。現在你正在尋找一個值爲ListItem的參數。但我會在那裏檢查所有的正確性。

+0

更改這些工作,謝謝 – Mateusz

0

從您編輯的問題版本開始,您嘗試發送在構建實際SQL命令時無法轉換的參數值。或者乾脆,這些值不具有簡單類型爲字符串,整數,布爾等

cmd.Parameters.AddWithValue("@origin", JourOrigin.SelectedItem); 
    cmd.Parameters.AddWithValue("@destination", JourDestination.SelectedItem); 
    cmd.Parameters.AddWithValue("@date", Calendar.SelectedDate); 
    cmd.Parameters.AddWithValue("@time", date.SelectedItem); 
    cmd.Parameters.AddWithValue("@driver", DriversJourney.SelectedValue); 

仔細檢查上面的線,並選擇實際值(不是整個對象,的SelectedItem好像是)。

更一般的,你應該嘗試將UI與業務邏輯分開。業務邏輯方法只能與相關數據(如標識符,名稱等)一起使用,而不能用於UI元素,如ListItem

相關問題