在数据库中搜索

Search in the database

此消息表单显示 table 这些信息(ID、FROM、TO、TITLE、MESSAGE)。

我正在尝试搜索发送给特定用户的所有邮件。用户将在 Search_textBox 中输入他的姓名,然后它将过滤 table 以仅保留发给该用户的消息。

private void Search_button_Click(object sender, EventArgs e)
        {

        SqlCommand cmd = new SqlCommand();
        cmd.Connection = con;
        cmd.CommandType = CommandType.Text;
        cmd.CommandText = cmd.CommandText = "Select * from MessagesTable where To =" + Search_textBox.Text;
        cmd.Parameters.AddWithValue("@To", Search_textBox.Text);

        DataSet dataSet = new DataSet();
        SqlDataAdapter adapter = new SqlDataAdapter(cmd);
        adapter.Fill(dataSet);

        dataGridView1.DataSource = dataSet.Tables[0];
      
      
    }

我收到这个错误:

System.Data.SqlClient.SqlException: 'Invalid column name 'To'.'

“search_name”参数包含什么?消息?列名称?

您的查询是

Select * from MessagesTable where " + search_name + " = @From"

然后您将“search_name”指定为@From...的参数 所以我相信你输入的是“姓名”,你的查询现在看起来像这样:

Select * from MessagesTable where Name = 'Name';

您在此指定的 table 中没有任何名称列,如您所述。

您可以按如下方式更改。当然,如果我理解正确的话,你想通过从用户那里得到的输入在消息字段中进行搜索。

private void Search_button_Click(object sender, EventArgs e)
    {

    SqlCommand cmd = new SqlCommand();
    cmd.Connection = con;
    cmd.CommandType = CommandType.Text;
    cmd.CommandText = "Select * from MessagesTable where  MESSAGE = @From";
    cmd.Parameters.AddWithValue("@From", search_name);

    DataSet dataSet = new DataSet();
    SqlDataAdapter adapter = new SqlDataAdapter(cmd);
    adapter.Fill(dataSet);

    dataGridView1.DataSource = dataSet.Tables[0];
  
  
}

尝试使用 To,因为“To”- 关键字 SQL:

cmd.CommandText = cmd.CommandText = "Select * from MessagesTable where [To] =" + Search_textBox.Text;

这是正确的

private void Search_button_Click(object sender, EventArgs e)
    {

    SqlCommand cmd = new SqlCommand();
    cmd.Connection = con;
    cmd.CommandType = CommandType.Text;
    cmd.CommandText = "Select * from MessagesTable where  [To]= @To";
    cmd.Parameters.AddWithValue("@To", Search_textBox.Text);

    DataSet dataSet = new DataSet();
    SqlDataAdapter adapter = new SqlDataAdapter(cmd);
    adapter.Fill(dataSet);

    dataGridView1.DataSource = dataSet.Tables[0];
  
  
}