【问题标题】:DataAdapter Sql Query with parameters - c#带参数的 DataAdapter Sql 查询 - c#
【发布时间】:2016-05-02 15:29:46
【问题描述】:

下面的代码运行正常,并通过搜索in列查看所有匹配项。

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;
     }

在特定列中搜索的答案可能是什么?

【问题讨论】:

  • 你能发布从连接打开到连接关闭的结束代码吗?或者解释一下什么是“搜索”、“sdt”?
  • 亚历山大不行。
  • 你不能这样做:stackoverflow.com/questions/3330343/…可以使用你的两个样本的“混合”方法。

标签: c#


【解决方案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 '";

【讨论】:

  • 我发现了一个新问题。如果未选择组合框,则会出现 catch 错误。关键字“like”附近的语法不正确
  • 你将不得不处理它未被选中的情况。我猜search.GetCombo() 如果没有被选中则返回 null。例如,您可以尝试在未选择任何内容时发出警报。 var columnName = search.GetCombo();if (columnName == null) {\\Show validation messagereturn;}
【解决方案2】:

请看这个

 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"]);

            }

        }

    }

【讨论】:

  • 这根本不正确。我正在使用 SqlDataAdapter 和组合框。
  • 抱歉我没听懂你的问题
猜你喜欢
  • 2021-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-29
  • 1970-01-01
  • 2023-02-04
  • 1970-01-01
  • 2017-09-10
相关资源
最近更新 更多