【发布时间】:2012-03-27 08:05:07
【问题描述】:
我的任务是编写一个允许用户运行即席查询的 winforms c# 应用程序。我在网上搜索了很多可以购买的工具(EasyQuery)但此时购买它是不可能的。
所以我想自己写这个。此时,我创建了一个在运行时使用表/列填充的树视图,我可以选择用户检查的列。但现在我必须弄清楚如何动态地JOIN 他们选择的表。
部分表结构如下:
Table - Roles - PK = RoleId
RoleId
RoleName
Table - Center PK = CenterId/RoleId/Prefix
CenterId
RoleId
Prefix
Table - Employee - PK = EmployeeID
EmployeeId
Name
CenterId
Dept
Org
Table - Prof - PK = EmployeeId/Profile
EmployeeId
Profile
我总共有 6 个表,可以在各种字段上连接,但由于用户需要即时连接,因此我需要在他们想要生成 SQL 时确定JOIN。在这一点上,我不知道继续生成这些JOINs 的最佳方法。
我什至考虑在数据库中创建一个表,并为每个表/列列出JOINs,然后我可以从那里构建它,但我不知所措。
我也尝试过类似的方法,但如果有不同方式的建议,我不想走错路:
private void GetJoins()
{
string joinList = string.Empty;
foreach (TreeNode tn in TablesTreeView.Nodes)
{
if (tn.Checked)
if (tn.Nodes.Count > 0) // this would be parent items only
{
foreach (TreeNode childNode in tn.Nodes)
{
// for first child checked
// check the next checked parent nodes for matching checked fields
// if next parent node has same field name checked then add the JOIN
}
}
}
}
这似乎是在正确的轨道上,还是您能建议另一种方式?
我知道这将是一项极其艰巨的任务,我什至还没有接触到动态的WHERE 子句。我只是在寻找有关临时创建JOINs 的最佳方法的建议。
【问题讨论】:
-
您的建造成本真的不到 1350 美元吗?
-
目前没有购买外部产品的预算。
标签: c# sql winforms dynamic adhoc