我確定我的問題已經在互聯網上多次被回答,但我找不到我正在尋找的東西。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