2016-11-23 36 views
0

これは私を狂ってしまいます。オブジェクト型System.Web.UI.WebControls.ListItemから既知の管理対象プロバイダのネイティブ型へのマッピングがありません

のマッピングが知られている管理プロバイダのネイティブ型にオブジェクト型System.Web.UI.WebControls.ListItemから存在していない

私はへの挿入を介してデータベースにリストボックスからデータを渡すためにしようとすると、私はこのエラーが発生します。リストボックスのデータもデータベースから抽出されます。 インサートは、次のようになります。

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

私はselectedIndexの、SelectedValueの、()、selectedValue.ToString())のSelectedItemでそれを試してみました。

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

彼らは正しい型にキャストまたは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-type-system-web-ui-webcontrols-listitem-to-a known)を使用します。 – Santi

+0

@サンティ何?彼は 'ToString()'をやっている。そこで、彼は 'SelectedItem'ではなく文字列を渡しています。あなたが何を意味するかわからない。しかし、私は例外が何を述べているのか、それが私が混乱している理由であることに同意します。言い換えれば、コードは正常に動作するはずです。そして、私はそれが例外の原因だとは思わない。 – Zer0

答えて

2

これらの行は、あなたの問題の一部です。

例外は、パラメータをタイプListItemのオブジェクトに設定していることを示しており、そのパラメータをデータベースに挿入できない可能性があります。

例外がスローされたとき(デバッガが接続されている)にブレークし、値が正しいタイプであることを確認してParametersコレクションを確認します。今のところ、ListItemの値を持つパラメータを探しています。しかし、私はそこにいる間にすべての正しさをチェックします。

+0

働いている人を変える、ありがとう – Mateusz

0

編集したバージョンの質問から、実際のSQLコマンドが構築されたときに変換できないパラメータ値を送信しようとしています。それとも単に、これらの値は、ブール値などの文字列、int型、などの単純なタイプを持っていない

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を分離しようとする必要があります。ビジネスロジックメソッドは、識別子、名前などの関連データでのみ動作し、ListItemなどのUI要素では機能しません。

関連する問題