我正在为一所学校创建一个进度跟踪器。
进度跟踪器在不同的线程中存储每个学生的分数和线程中的标准。
我目前计划在每个班级(学生)中使用一个表来存储他们在每个线程中的进度,然后在每个线程中使用一个表来存储他们在该线程中的每个标准中的进度。
我无法知道学校中将有多少班级(表),因此我需要找到某种方法,允许管理员帐户使用管理员指定的名称创建班级(表)。
我想到的最简单的方法是在创建时使用变量作为表名,但有没有更好的方法呢?
发布于 2016-02-11 01:11:56
您可以这样做,但正如D Stanley强调的那样,您不能将参数用于表名。因此,如果要将用户的输入用作表名,您将无法将其参数化,因此这是一个非常糟糕的主意。这将立即打开SQL注入的大门,这从来都不是一个好计划。
即使对用户的输入进行了严格的清理,也有太多的变量需要考虑,这无疑需要比预期多得多的工作,并且随着sql的发展仍然容易受到攻击。
我建议重新措辞你的问题,也许给出你的应用程序试图实现的大致概念,看看是否有其他方法前进,而不是为每个用户创建一个表。
更新
根据您对问题的重新表述,听起来您需要考虑所需的数据库结构。我很想要下面的表格:
每个学生1个条目,主键StudentId
然后,您可以对Progress表进行查询,该表仅根据学生的Id、Id和ClassId,或者更进一步的Id、ClassId和CriteriaId等来提取学生的进度。
在允许管理员创建自己的查询方面,您可以简单地创建查询,允许管理员将学生记录插入到student表中,将类插入到Class表中,将criteria插入到Criteria表中。在创建学生记录时,您可能还会同时捕获他们的班级和条件,这将把他们的记录插入到Progress表中(到目前为止,最初是0表示进度)。您可能还需要一条update语句来允许管理员为任何给定的学生更新Progress表。
无论如何,希望这是一个足够的指针,使您不必为每个学生或每个班级等创建一个表。
发布于 2016-02-11 01:18:29
首先,您必须创建数据库和表(或者您可以稍后使用C#创建它)。您必须使用资源文件将C#与SQL连接起来,如下所示
Provider=XXXXXX.DataSource.1 ; Data Source=XXXX.XXXX.XXXX.CXXX;
Persist Security Info=True;User ID=XXXXX;pASSWORD=XXXXXX;
Initial Catalog=XXXXX;Force Translate=0;
Catalog Library List=XXXXXX,XXXXX然后创建一个SQLConnection对象,使用此方法创建连接
CreateConnection() 使用以下方法选择您放在resx文件(或资源)中的文件:
`NameOfObject.ConnectionString = ConnStr();
并使用此方法将其打开NameOfObject.Open();
现在,您可以使用此结构插入、删除和执行查询,最后必须在代码中获得如下内容:
SqlConnection sqlConnection1 = new SqlConnection("Your Connection String"); //Here you can put the string that you'll use in your resx file
SqlCommand cmd = new SqlCommand(); //Initialize the command object for executing instructions (queries)
SqlDataReader reader;
cmd.CommandText = "INSERT INTO TABLE_NAME_HERE VALUES (" + nameYouWillExtractFromTheUser + ")";
cmd.CommandType = CommandType.Text; //We say that the command is a textType
cmd.Connection = sqlConnection1; //Initiate the connection
sqlConnection1.Open(); //Opens the connection
reader = cmd.ExecuteReader(); //Execute the connectionhttps://stackoverflow.com/questions/35321332
复制相似问题