2016-05-01 15 views
1

以下のコードは正常に動作しており、列の検索ですべての一致を表示しています。DataAdapter Sqlクエリのパラメータ - c#

string sql = "SELECT car, model, year FROM store WHERE" + column + "LIKE " + search + "'"; 

これで、クエリにパラメータを追加しました。働いていない。 検索コラムに表示していません。唯一の列の検索欄(1 = 1)

public int SearchCar(MainStore searchCars) 
    { 
      string connection = @"Data Source=(LocalDB)"; 
      SqlConnection con = new SqlConnection(connection); 
      string sql = "SELECT car, model, year FROM store WHERE @column like @search '"; 
      SqlDataAdapter sda = new SqlDataAdapter(sql, con); 

      sdt.SelectCommand.Parameters.AddWithValue("@column", "%" + searchCars.GetCombo()); 
      sdt.SelectCommand.Parameters.AddWithValue("@search", "%" + searchCars.GetSearch()); 

      DataTable dt = new DataTable(); 
      sda.Fill(dt); 
      dataGridView1.DataSource = data; 
    } 

場合、何が可能、それが特定の列内を検索取得するための答えをすることができ、列のすべての行を表示しますか?

+0

接続終了から接続終了までの間にエンド・コードを投稿できますか? 「検索」、「sdt」とは何ですか? – Jeyara

+0

Alexanderは動作しません。 – Global

+0

あなたはそれを行うことはできません:http://stackoverflow.com/questions/3330343/c-sharp-sqlcommand-cannot-use-parameters-for-column-names-how-to-resolveあなたは 'ハイブリッド'あなたの2つのサンプルの方法。 –

答えて

1

変更でそれを見てみてください。

public int SearchCar(MainStore searchCars) 
    { 
      string connection = @"Data Source=(LocalDB)"; 
      SqlConnection con = new SqlConnection(connection); 
      string sql = string.Format("SELECT car, model, year FROM store WHERE {0} like @search", search.GetCombo()); 
      SqlDataAdapter sda = new SqlDataAdapter(sql, con); 

      // sdt.SelectCommand.Parameters.AddWithValue("@column", "%" + search.GetCombo()); 
      sdt.SelectCommand.Parameters.AddWithValue("@search", "%" + search.GetSearch()); 

      DataTable dt = new DataTable(); 
      sda.Fill(dt); 
      dataGridView1.DataSource = data; 
    } 

はまた、あなたがの末尾に余分な引用符を持っていますあなたのお問い合わせ: like @search '";

+0

新しい問題を発見しました。コンボボックスが選択されていないと、キャッチエラーが表示されます。キーワードのような不適切な構文 'like' – Global

+1

あなたが選択されていないケースを処理する必要があります。私は 'search.GetCombo()'が選択されていない場合はnullを返します。たとえば、何も選択されていない場合にアラートを投げてみることができます。 'var name = search.GetCombo(); '' if(columnName == null){''検証メッセージを表示する '' return; '' '' – Ash

1

列名をパラメータ化しないように、次のようにこの

private static void Select() { 

     string cmdStr = "SELECT FirstName, LastName, Telephone FROM Person WHERE FirstName = @FirstName"; 

     using (SqlConnection connection = new SqlConnection(ConnectionString)) 

     using (SqlCommand command = new SqlCommand(cmdStr, connection)) { 

      command.Parameters.AddWithValue("@FirstName", "John"); 

      connection.Open(); 

      SqlDataReader reader = command.ExecuteReader(); 

      while (reader.Read()) { 

       string output = "First Name: {0} \t Last Name: {1} \t Phone: {2}"; 

       Console.WriteLine(output, reader["FirstName"], reader["LastName"], reader["Telephone"]); 

      } 

     } 

    } 
+0

これはまったく正しくありません。私はSqlDataAdapterとコンボボックスを使用しています。 – Global

+0

申し訳ありませんが私はあなたの質問を理解していません – suulisin