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 回答