2012-04-27 11 views
2

私は以前のコンボボックスの選択に基づいてコンボボックスのデータセットを選択しようとしています。私はそれが第2の方法でSELECTステートメントであると信じるように導かれてきましたが、なぜそれが機能していないのか分かりません。"データ型がブール演算に無効です。"

The data type is not valid for the boolean operation. [Data type (if known) = int,Data type (if known) = nvarchar ].

私はParameter.AddWithValueを使用しても無駄に文字列として値を設定しようとしている:私は、アプリケーションを実行すると、私はこのエラーを受け取ります。誰でも私にこの問題を正しく解決する方法を教えてもらえますか?ありがとうございました。

private void cboCities_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     if (cboCities.SelectedIndex > -1) 
     { 
      SqlCeConnection cn = new SqlCeConnection(@"Data Source = \Program Files\ParkSurvey\ParkSurvey.sdf; Persist Security Info = False; Password = *"); 
      cn.Open(); 
      SqlCeCommand cmd = cn.CreateCommand(); 
      cmd.CommandText = "SELECT Name FROM Parks WHERE CityId ='" + cboCities.SelectedValue + "'ORDER BY Name ASC"; 
      SqlCeDataAdapter da = new SqlCeDataAdapter(cmd); 
      DataSet ds = new DataSet(); 
      da.Fill(ds); 
      cn.Close(); 
      cboParks.ValueMember = "ParkId"; 
      cboParks.DisplayMember = "Name"; 
      cboParks.DataSource = ds.Tables[0]; 
      cboParks.SelectedIndex = -1; 
     } 
+0

あなたがしてくださいにいくつかのより多くの細部を置くことができます(タイプおよびデータ) –

+0

がええ..私はプリートに同意を..おそらく何かがあります*その他の*私たちは知らない – MilkyWayJoe

+0

月曜日までデータベースでコンピュータを回りませんが、メモリが正しければ、これと同様の設定です: 都市 - CityId、int(PK )(1,2,3など) - 名前、varchar(ダラス、フォートワースなど) - rowguid、uniqueidentifier。 パークス - ParkId、INT(PK)(1、2、3、など) - CityId、INT(FK)( '') - 名前、VARCHAR(ウィロークリーク、タラント、など) - ROWGUID、UNIQUEIDENTIFIER 。 cboCities.SelectedValueは、初期メソッドのcboCities.ValueMemberであり、CityIdと等しくなります。私は月曜日に詳細を提供します。この情報を準備ができていないことに対する謝罪。 – PicoDeGallo

答えて

0

ParksテーブルのCityIdは整数ですか?

あなたは文字列にint型すなわちCityId比較している「cboCities.SelectedValueで...値を...」

へと整数市、それをキャストしてみてください。

cmd.CommandText = "SELECT Name FROM Parks WHERE CAST(CityId AS NVARCAR) ='" + cboCities.SelectedValue + "'ORDER BY Name ASC"; 

それともあればcboCities.SelectedValueであなたも

cmd.CommandText = "SELECT Name FROM Parks WHERE CityId = " + cboCities.SelectedValue + " ORDER BY Name ASC"; 

は(私はCBの周りの単一引用符を削除しました注意してください(比較を整数に整数)を引用符なしでそれを試すことができますCityIdと同じであることを確信していますoCities.SelectedValue)

+0

それは何もないが、2番目のものは失敗するだろう。 'ORDER BY'の前にスペースを入れてください。 – MilkyWayJoe

+0

乾杯の耳 - @milkywayjoe –

+0

これらはどちらも次のエラーを返します。 クエリの解析中にエラーが発生しました。 [トークン行番号= 1、トークン行オフセット= 49、トークンエラー中=データ] – PicoDeGallo

0

あなたは次のようなものを試しましたか?テーブルの構造とどのようなデータがどのように見える、といただきました!cboCities.selectedValueで - -

//[...code...]  
    cmd.CommandText = "SELECT Name FROM Parks WHERE CityId = @CityId ORDER BY Name ASC"; 
    cmd.Parameters.Add("@CityId", System.Data.SqlDbType.Int, 2).Value = Convert.ToInt32(cboCities.SelectedValue); 
//[...code...]  
+0

このメソッドを使用すると、InvalidCastExceptionが返されます。 – PicoDeGallo

+0

多分大きさ..答えをまだ見つけていないのに後でチェックしますが、2より大きいサイズで試してみてください – MilkyWayJoe

+0

私はそれをデータベースの長さに変更しましたが、例外は残っています。 – PicoDeGallo

関連する問題