2012-02-13 53 views
0

我在c#中编程,并使用DataGrid显示Oracle 10g数据库中的值。我有一个表属性ID,发件人,文本,时间,类型,部门,严重性和信心水平。我想写一个查询过滤器。我有一个文本框,用户可以在其中输入发件人的任何名称,只有与该发件人对应的元组应显示在数据网格中。查询SQL中的过滤器以提取数据并在c#中显示DataGrid

如果我在数据网格中显示完整的表格,那么它工作正常,而对于过滤器,我写了下面的查询,但它给出了NULL结果。

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

查询的问题是什么?

回答

0

尝试这样,

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

实际上,我们正在编写查询构建器中的查询。所以我们只需要SQL中的查询 – 2012-02-13 10:25:33

1

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

string SqlString = "SELECT E_ID, SENDER, TEXT, 'TIME', 'TYPE', DEPT, SEVERITY, CONF_LEV FROM EMAIL WHERE SENDER [email protected]" 


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

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

//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

优点读吧:简单,一个避免调用数据库 缺点:初始时间消耗是非常高的,但是能避免数据库调用。