2

以前の ComboBox の選択に基づいて ComboBox のデータ セットを選択しようとしています。2番目の方法のステートメントであると信じるようになりましたがSELECT、なぜ機能しないのかわかりません。アプリケーションを実行すると、次のエラーが表示されます。

ブール演算のデータ型が無効です。[データ型 (既知の場合) = int、データ型 (既知の場合) = 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;
        }
4

2 に答える 2

0

次のようなことを試しましたか?

//[...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...]    
于 2012-04-27T21:11:33.577 に答える
0

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

int ie CityId を文字列 '...cboCities.SelectedValue の値 ...' と比較しています。

City と integer をキャストしてみてください:

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

または、cboCities.SelectedValue が CityId と同じであることが確実な場合は、引用符なしで試すこともできます (整数と整数の比較)。

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

(cboCities.SelectedValue を囲む一重引用符を削除したことに注意してください)

于 2012-04-27T21:06:06.370 に答える