0

現在、Access97 データベース アプリケーションを新しい WinForms アプリケーションに移行中です。

一般的なアカウント データを表示するすべての「アカウント」の中央フォームがあり、そのフォーム内に別のフォームを開くボタンがあります。アプリケーションは、以下の表の例を使用して、SQL クエリからフォーム名を取得します。

| ClientID | FormName |
+----------+----------+
|    1     |   frm1   |
|    2     |   frm2   |

したがって、ClientID が 1 の場合、ボタンは Form1 を開く必要があります。ClientID が 2 の場合、ボタンは Form2 を開く必要があります。

私の質問は、WinForms でボタンのクリック時にクエリを実行し、テーブル内にある対応するフォームを開くにはどうすればよいですか?

どんな助けでも大歓迎です。

4

1 に答える 1

2

SQL ヘルパー メソッドを記述する必要があります。次のようなもの(私はチェックしてハッキングしていません)

public static T SQLGet<T>(SqlConnection conn, string sql)
{
    using (SqlCommand command = new SqlCommand())
    {
        command.Connection = conn;
        command.CommandTimeout = 0; // No timeout - set or remove.
        command.CommandText = sql;
        return (T)Convert.ChangeType(Command.ExecuteScalar(), typeof(T));
    }
}

あなたはこれを次のように使うことができます

SqlConnection conn = new SqlConnection(someValidConnectionString);
string formName = Utilities.SQLGet<string>(conn, 
    "SELECT [FormName] " + 
    "FROM [SomeTable] WHERE [ClientID] = 1;") // Not considering SQL injection here!

取得した名前でリフレクションを使用できるようになりましたformName

Type t = assembly.GetType(formName);
Form frm1 = (Form)Activator.CreateInstance(t);

これが役立つことを願っています。

ノート。これにはエラー処理がありません。

于 2014-07-01T10:57:06.003 に答える