更新表并添加新的主索引列



我有一个成绩单数据库,当我计算平均值时,我使用下面的cSQL语句将它们转储到另一个数据库中的表中。我有两个问题-一个,我不能更新新表,因为它没有主键。第二,我试图添加一个自动号码列来解决这个问题,但我所做的一切似乎都没有为我添加一个新列。这里是代码-我错过了什么?

cSQL = "Select [StudentID],[StudentLast] as [Last Name],[StudentFirst] as [First Name], [MI], "
cSQL = cSQL & "AVG(Grade) AS [Average], MAX([Letter]) as [Letter], COUNT([Grade]) as [# Assign] "
cSQL = cSQL & ",[Subject],[Term] INTO [SubjectAverages] in '" & AppDir & "averages.mdb'"
cSQL = cSQL & " FROM [Grades] WHERE [Subject] = '" & FixApost(cboSubject.Text) & "' AND [Term] = " & LastTerm
cSQL = cSQL & " GROUP BY [StudentLast],[StudentFirst],[MI],[StudentID],[Subject],[Term] ORDER BY [StudentLast],[StudentFirst],[MI] ;"
Try
'Use cSQL Statement to calculate Averages into table SubjectAverages in DB: 'Averages.mdb'
OpenDB2()
da = New OleDbDataAdapter(cSQL, con)
dt.Columns.Clear()
dt.Rows.Clear()
da.Fill(dt)
'Add New Column
dt.Columns.Add("Number", GetType(Integer))
'Are these needed?
dt.AcceptChanges()
da.Update(dt)
con.Close()
Catch ex As Exception
Me.Cursor = Cursors.Default
MessageBox.Show("Error during Chart Update." + ControlChars.CrLf + ex.Message, "Classroom Grader DB Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
CloseandDispose2()
Exit Sub
End Try

这里有很多错误。首先,不能通过向DataTable添加列来修改数据库表的模式。您需要对数据库执行一条ALTER TABLE语句。您可以通过创建OleDbCommand并调用ExecuteNonQuery来做到这一点。为了准确地学习如何编写这样的SQL语句,你应该研究一下Jet SQL,特别是ALTER TABLE语句。

也就是说,如果可能的话,简单地在Access中打开数据库并可视化地更改模式会更有意义。

对于上面实际执行的SQL,根本不应该使用数据适配器。您直接在数据库之间移动数据,而不需要应用程序的干预,因此,您应该使用OleDbCommand并调用ExecuteNonQuery。如果你在一个步骤中将数据拉入应用程序,然后在另一个步骤中将其保存到另一个数据库,那么数据适配器和DataTable将是正确的选择,尽管代码结构需要进行重大更改。

相关内容

  • 没有找到相关文章

最新更新