我确定我的问题已经在互联网上多次被回答,但我找不到我正在寻找的东西。SQL Server CE - 更新表的问题
我正在使用VB.NET,我的数据库是SQL Server Compact .SDF
文件。以下是我打开数据库的方法。
Private Shared Sub OpenDatabase(ByVal tablename As String)
If _DBLoaded Then Return
'// open database connection
conn = New SqlCeConnection("Data Source = giadatabase.sdf")
conn.Open()
'// create command for making extracting data
cmd = conn.CreateCommand
cmd.CommandText = "SELECT * FROM [" & tablename & "]"
'// setup database adapter
da = New SqlCeDataAdapter(cmd)
'// create command for inserting/updating database
cb = New SqlCeCommandBuilder(da)
'// load dataset
ds = New DataSet()
da.Fill(ds)
'// get the relevant table
dt = ds.Tables(0)
_DBLoaded = True
End Sub
我在我的应用程序启动时运行这个子部分。我相信数据库只需要打开一次。不断重新开启数据库会给我的应用程序带来性能问题(如果我错了,请纠正我)。
对于我的列表对象加载数据我使用以下命令:
Public Shared Function GetList() As List(Of DatabaseListObject)
OpenDatabase("TestTable")
'// Make a list of items in database
Dim ret As New List(Of DatabaseListObject)
For Each dRow As DataRow In dt.Rows
ret.Add(New DatabaseListObject(dRow("ID"), dRow("LongName"), dRow("ShortName")))
Next
Return ret
End Function
所以我GetList
功能确保数据库已经打开,并且数据库始终打开一次我的应用程序的生命周期。我的列表对象充满了上述函数的数据。
这是我如何更改我的数据库:
Public Shared Function AddItem(LongName As String, ShortName As String) As DatabaseListObject
'// Make changes
Dim row = dt.NewRow()
row("LongName") = TimeOfDay.ToString
row("ShortName") = ShortName
dt.Rows.Add(row)
da.Update(ds, dt.TableName)
Dim newcmd = conn.CreateCommand
newcmd.CommandText = "SELECT @@IDENTITY;"
Dim newID As Integer = newcmd.ExecuteScalar()
Dim item As New DatabaseListObject(newID, LongName, ShortName)
Return item
End Function
现在假设数据库被正确地从上面的代码更新。我表中的ID
列是自动编号。当我在添加一行后调用GetList
函数时会发生问题。系统抛出新添加的行ID列为NULL的错误。而它应该是自动添加的号码。当我重新启动应用程序时,即从头开始打开数据库时,GetList
会正确显示自动编号。
很明显,当我添加一个新行时,表的ID
列没有被填入自动编号。所以我需要建议。我应该每次打电话GetList
(这将在我的应用程序中经常调用)从头开始数据库。如果不是整个数据库,那么至少应该调用哪些代码才能正确刷新表,而不会对应用程序造成太多性能问题。
我不认为这回答了我的问题。我对SELECT @@ IDENTITY没有问题。这对我在'AddItem'函数中工作正常。我面对的问题是,在AddItem函数完成向表中添加数据之后,表不会被新的自动编号刷新。当我在GetList函数中调用dRow(“ID”)来更新我的列表时,它失败。我没有任何绑定到这个数据库的控件。 – 2013-03-18 07:20:42