在SQL中查询过滤器以提取数据并在c#DataGrid中显示

本文关键字:显示 c#DataGrid 数据 SQL 查询 过滤器 提取 | 更新日期: 2023-09-27 18:24:11

我在c#中编程,并使用DataGrid显示Oracle 10g数据库中的值。我有一个包含属性Id、Sender、Text、Time、Type、Department、Severity和Confidence level的表。我想为筛选器编写一个查询。我有一个文本框,用户可以在其中输入任何发件人的名称,并且只有与该发件人对应的元组才会显示在数据网格中。

如果我在数据网格中显示完整的表,那么它运行良好,而对于过滤器,我已经编写了以下查询,但它给出了NULL结果。

SELECT        E_ID, SENDER, TEXT, "TIME", "TYPE", DEPT, SEVERITY, CONF_LEV
FROM            EMAIL
WHERE        (SENDER = '" & TextBox1.Text & "')

查询有什么问题??

在SQL中查询过滤器以提取数据并在c#DataGrid中显示

为什么不使用SqlCommand参数。您可以这样尝试,通过使用参数化查询可以避免sql注入。并且确实为列提供描述性名称,这将避免与Sql关键字混淆。

string SqlString = "SELECT E_ID, SENDER, TEXT, 'TIME', 'TYPE', DEPT, SEVERITY, CONF_LEV FROM EMAIL WHERE SENDER =@sender"

using(SqlCommand cmd = new SqlCommand(SqlString , conn))
{
  cmd.Parameters.AddWithValue("@sender", Textbox1.Text); 
  cmd.ExecuteNonQuery(); 
}

这样试试,

string.Format("SELECT E_ID, SENDER, TEXT, 'TIME', 'TYPE', DEPT, SEVERITY, CONF_LEV FROM EMAIL WHERE SENDER = '{0}'", TextBox1.Text);

这是一个简单的问题。我认为一个不错的方法是使用Query获取所有数据,并将其存储在数据表中。然后您可以根据需要的条件应用过滤器。

   //DataTable table = DataSet1.Tables["0"];
    // Presuming the DataTable has a column named Date.
    string expression;
    expression = "SENDER LIKE %"+TextBox1.Text+%";
    DataRow[] foundRows;
    // Use the Select method to find all rows matching the filter.
    foundRows = table.Select(expression); 

您可以根据名称获取相应的值。从中读取http://msdn.microsoft.com/en-us/library/det4aw50.aspx#Y600

优点:简单,避免数据库调用缺点:初始时间消耗很高,但可以避免数据库调用。