2012-02-13 6 views
0

私はC#でプログラミングしており、Oracle 10gデータベースの値を表示するためにDataGridを使用しています。 Id、Sender、Text、Time、Type、Department、Severity、Confidenceレベルの属性を持つテーブルがあります。私はフィルタのためのクエリを書いてみたいです。私は、送信者の任意の名前を入力することができ、その送信者に対応するタプルだけがデータグリッドに表示されるべきであるテキストボックスを持っています。SQLでフィルタを検索してデータを抽出し、C#で表示するDataGrid

データグリッドにフルテーブルを表示すると、正常に動作していますが、フィルタでは次のクエリが書き込まれましたが、NULL結果が返されます。

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

クエリの問題は何ですか?あなたはSqlCommandオブジェクトのパラメータを使用しない理由

答えて

0

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

実際には、Query in Query Builderを作成しています。したがって、SQLではクエリのみが必要です –

1

、次のように試してみてください。パラメータ化されたクエリを使用することで、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

これは簡単な問題です。 私は1つの良い方法は、クエリを使用してすべてのデータを取得し、datatableに格納することだと思う。 次に、必要な条件に基づいてフィルタを適用できます。

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

利点から、それを読む:初期時間の消費量が非常に高いですが、DBの呼び出しを避けることができます簡単に、避けデータベースは 短所を呼び出します。

関連する問題