我正在为一所学校创建一个进度跟踪器。
进度跟踪器存储每个学生在各个线程中的分数以及线程内的标准。
我目前计划为每个类(class)(学生)使用一个表来存储他们在每个线程中的进度,然后为每个线程使用一个表来存储他们在该线程内每个条件中的进度。
我无法知道学校中有多少个类(class)(表),因此我需要找到某种方法允许管理员帐户创建具有管理员指定名称的类(class)(表)。
我想到的最简单的方法是在创建时使用变量作为表名称,但可能有更好的方法吗?
最佳答案
你可以做类似的事情,但正如 D Stanley 强调的那样,你不能使用表名参数。因此,如果用户的输入用作表名,您将无法参数化用户的输入,因此这是一个非常糟糕的主意。这会立即让您面临 SQL 注入(inject),这绝不是一个好计划。
即使对用户输入进行了严格的清理,也有太多的变量需要考虑,这无疑需要比预期更多的工作,并且随着 SQL 的发展,仍然可能容易受到攻击。
我建议重新表述您的问题,以便大概了解您的应用程序试图实现的目标,看看是否有其他方法可以在不为每个用户创建表的情况下实现。
更新
根据您对问题的重新措辞,听起来您需要考虑所需的数据库结构。我很想拥有下表:
- 学生,每个学生 1 个条目,StudentId 主键
- 类 - 每个类 1 个条目,ClassId 主键
- 条件 - 每种类别条件 1 个条目,CriteriaId 主键
- 进度 - 每个学生可能有多个条目,引用 StudentId、ClassId、CriteriaId 和分数(可能是 ClassScore 和 CriteriaScore)。
然后,您可以查询“进度”表,该表仅根据学生的 Id、或 Id 和 ClassId,或者进一步根据他们的 Id、ClassId 和 CriteriaId 等提取学生的进度。
就允许管理员创建自己的查询而言,您只需创建查询,允许管理员将学生记录插入到学生表中,将类(class)插入到类(class)表中,将条件插入到条件表中。在创建学生记录时,您可能还会同时捕获他们的类(class)和标准,这会将他们的记录插入到进度表中(最初为 0 表示到目前为止的进度)。您可能还需要一个更新语句,以允许管理员更新任何给定学生的进度表。
无论如何,希望这足以让您不必为每个学生或每个类(class)等创建一个表。
关于c# - 创建表,其中表名是变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35321332/