我目前正在将一个Access97数据库应用程序转移到一个新的WinForms应用程序。
我们有一个用于所有"Accounts"的中心表单,它显示一般帐户数据,在该表单中有一个打开另一个表单的按钮,应用程序使用下面表格的示例从SQL查询中获取表单名称。
| ClientID | FormName |
+----------+----------+
| 1 | frm1 |
| 2 | frm2 |
所以如果ClientID是1,那么按钮应该打开Form1,如果ClientID是2,按钮应该打开Form2。
我的问题是我如何让WinForms运行查询按钮单击,然后打开表中找到的相应表单?
您需要编写一个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);
我希望这对你有帮助。
。