在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 & "')
查询有什么问题??
为什么不使用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
优点:简单,避免数据库调用缺点:初始时间消耗很高,但可以避免数据库调用。