根据条件从DataBase填充DataGridView的值

时间:2009-06-24 13:40:56

标签: c# datagridview

我正在创建一个应用程序,我希望根据用户在文本框中输入的值显示DataGridView中的行。

对于Eg。 如果用户在文本框中输入BookName,则应在DataGridView中显示有关该书的所有详细信息。

我使用了以下编码:

            SqlConnection objSqlConnection = new SqlConnection();
            string connectionStringSettings = "Data Source =.; Initial Catalog = LibrarySystemManagement;Integrated Security = SSPI";
            private void btnSearch_Click(object sender, EventArgs e)
            try
            {
                objSqlConnection.ConnectionString = connectionStringSettings;
                objSqlConnection.Open();

                if ((txtBookName.Text != "") || (txtCategory.Text != ""))
                {

                    SqlDataAdapter objSqlDataAdapter = new SqlDataAdapter("select * from LIBRARYBOOKDETAILS where Title = '"+txtTitle.Text+"'", objSqlConnection);
                    SqlCommandBuilder objSqlCommandBuilder = new SqlCommandBuilder(objSqlDataAdapter);
                    DataTable objDataTable = new DataTable();
                    objSqlDataAdapter.Fill(objDataTable);
                    BindingSource objBindingSource = new BindingSource();
                    objBindingSource.DataSource = objDataTable;
                    dataGridView1.DataSource = objBindingSource;
                    objSqlDataAdapter.Update(objDataTable);
                    objSqlConnection.Close();
                }
            }
            catch (Exception e1)
            {
                MessageBox.Show(e1.Message + e1.Source);
            }

但是上面的代码显示了表格中输入的所有行。我的意思是不根据条件重新行。

任何人都可以帮我找到用于根据条件检索数据的正确代码段吗?

请帮帮我。

提前致谢。

1 个答案:

答案 0 :(得分:3)

您可以通过直接接受用户输入来打开SQL注入,尽管这是一个副作用。你为什么要在这部分中调用objSqlDataAdapter.Update(objDataTable);

虽然其他一切看起来都不错,但我会尝试两件事:

  1. 删除objSqlDataAdapter.Update(objDataTable);来电 - 什么都没有被修改,那么更新内容是什么?此时,您应该只选择数据。这也是在更新表时修改表,并且该表充当BindingSource的数据源。

  2. 更改select命令以使用参数,看看这是否有所不同。此步骤具有防止SQL注入的额外好处。

  3. 所以改变这个:

    SqlDataAdapter objSqlDataAdapter = new SqlDataAdapter("select * from LIBRARYBOOKDETAILS where Title = '"+txtTitle.Text+"'", objSqlConnection);
    

    对此:

    SqlCommand command = new SqlCommand("select * from LIBRARYBOOKDETAILS where Title = @Title", objSqlConnection);
    command.Parameters.AddWithValue("@Title", txtTitle.Text);
    
    SqlDataAdapter objSqlDataAdapter = new SqlDataAdapter(command);