c#-独立更新具有相同id的ms access数据库记录
我为一些学生提供了一个关系型ms access数据库。(数据库中已经填充了一些数据) 我的数据库中有两个表: 1.tblStuInfo了解学生的一般信息。 2.TBL每年管理其成绩和兴趣的教育 名为“StuID”的列是tblStuInfo和外键中的主键 在教育方面 & 在my form load事件中,动态文本框会自动为TBLStueEducation表中的每条记录创建,并且它们会正确地填充,不会出现任何问题 我的问题是,当我通过winform编辑一些信息(此处假设仅为EduYear)并单击“保存”时,所有记录将获得相同的值(最后一个文本框) 这是我的保存按钮代码:c#-独立更新具有相同id的ms access数据库记录,c#,database,winforms,datatable,C#,Database,Winforms,Datatable,我为一些学生提供了一个关系型ms access数据库。(数据库中已经填充了一些数据) 我的数据库中有两个表: 1.tblStuInfo了解学生的一般信息。 2.TBL每年管理其成绩和兴趣的教育 名为“StuID”的列是tblStuInfo和外键中的主键 在教育方面 & 在my form load事件中,动态文本框会自动为TBLStueEducation表中的每条记录创建,并且它们会正确地填充,不会出现任何问题 我的问题是,当我通过winform编辑一些信息(此处假设仅为EduYear)并单击
connection.Open();
OleDbCommand updateStuEducation = new OleDbCommand();
updateStuEducation.Connection = connection;
readStuEducation.CommandText = "select * from tblStuEducation where stuID = 1000";
//textBoxNamesArray use LINQ to save all values from textboxes with txtEduYear in their name
string[] textBoxNamesArray = tabpEdu.Controls.OfType<TextBox>().Where(a => a.Name.Contains("txtEduYear")).Select(a => a.Text).ToArray();
Int32 i = 0;
foreach (string value in textBoxNamesArray)
{
readStuEducation.CommandText = "update tblStuEducation set EduYear = '" + value[i] + "'";
readStuEducation.ExecuteNonQuery();
i++;
}
connection.Close();
等等…我要做三个改变 1) 您需要一个WHERE子句--“update TBLSTUEDUCTION set EduYear=x”将在表中的每条记录上更新EduYear 2) 这里有一个SQL注入漏洞;连接字符串以生成CommandText是不可接受的。你需要打电话或类似的事情。(读) 3) 在访问
值[i]
时,可能会出现一些混乱;因为value
已在相应的文本框中包含该值。值[i]将从该字符串返回单个字符
所以你应该得到这样的东西
readStuEducation.CommandText = "update tblStuEducation set Grade = ? where stuID = ? and EduYear = ?";
readStuEducation.AddParameter(value); // value to set
readStuEducation.AddParameter(1000); // student ID
readStuEducation.AddParameter(eduYear); // student ID
readStuEducation.ExecuteNonQuery();
我会做三个改变 1) 您需要一个WHERE子句--“update TBLSTUEDUCTION set EduYear=x”将在表中的每条记录上更新EduYear 2) 这里有一个SQL注入漏洞;连接字符串以生成CommandText是不可接受的。你需要打电话或类似的事情。(读) 3) 在访问
值[i]
时,可能会出现一些混乱;因为value
已在相应的文本框中包含该值。值[i]将从该字符串返回单个字符
所以你应该得到这样的东西
readStuEducation.CommandText = "update tblStuEducation set Grade = ? where stuID = ? and EduYear = ?";
readStuEducation.AddParameter(value); // value to set
readStuEducation.AddParameter(1000); // student ID
readStuEducation.AddParameter(eduYear); // student ID
readStuEducation.ExecuteNonQuery();
谢谢你,史蒂夫。但它仍然使用最新的文本框值更新stuID=1000的记录中的所有EduYear列。我需要用每一行的独立年份值来更新每一行;这将为特定的学生在特定的年份设定分数。这正是我的问题。除了stuID,所有其他列都可以有不同的值,因此条件可能会有所不同。我正在寻找一个解决方案来浏览更新查询中的每一行。亲爱的Steve,当我们使用DataReader时。我可以通过在第二个表中添加一个新列(counter)并在WHERE子句中添加另一个条件来解决这个问题,正如u所建议的那样。我只是想说声谢谢,谢谢史蒂夫。但它仍然使用最新的文本框值更新stuID=1000的记录中的所有EduYear列。我需要用每一行的独立年份值来更新每一行;这将为特定的学生在特定的年份设定分数。这正是我的问题。除了stuID,所有其他列都可以有不同的值,因此条件可能会有所不同。我正在寻找一个解决方案来浏览更新查询中的每一行。亲爱的Steve,当我们使用DataReader时。我可以通过在第二个表中添加一个新列(counter)并在WHERE子句中添加另一个条件来解决这个问题,正如u所建议的那样。我只是想说声谢谢。