1.取得序號(順序號)
如果習慣了ORACLE的Sequence,到ACCESS下使用自動編號欄位還是會不習慣:如何取得新的編號值,如何拿他來做關聯欄位值?
可以做如下一個函數:
/**/''' <summary>
''' 取得序列的下一值,用於處理自動編號欄位,庫表結構為SeqTable(IDField,AA),AA為數字型欄位
''' </summary>
''' <param name="strSeqTable"></param>
''' <returns></returns>
''' <remarks></remarks>
Public Shared Function GetSeqValue()Function GetSeqValue(ByVal theOleDbAccess As OleDbAccess, ByVal strSeqTable As String) As Object
Try
Dim aCon As OleDbConnection = CType(theOleDbAccess.OpenConnection(CType(aCon, IDbConnection)), OleDbConnection)
Dim strSQL1 As String = "insert into " & strSeqTable & "(AA)values(1)"
Dim strSQL2 As String = "SELECT @@IDENTITY"
Dim aCmd As New OleDbCommand(strSQL1, aCon)
aCmd.ExecuteNonQuery()
aCmd.Dispose()
Dim aCmd2 As New OleDbCommand(strSQL2, aCon)
Return aCmd2.ExecuteScalar()
Catch ex As Exception
modOutputLog.OutputLog(ex)
Throw ex
End Try
End Function
2.欄位名的保留字
開始從ORACLE轉到ACCESS,因為要做一單機版程式,並要導資料到ORACLE上,因此採用了和ORACLE庫表一樣的結構,如下:
UID,PhoneNo,Address,Password
一切SELECT都正常,我手工往裡加了資料,訪問也正常,直到我想從ORACLE導資料並insert到ACCESS時,出錯了:無效的INSERT語句!
我更新用的是oleDBDataAdapter產生的SQL來更新的,到我改成手工的:
insert into AAAA(UID,PhoneNo,Address,Password) values(xxxxxxx)也還是不行。
我用上面的SQL在ACCESS中構造了一個查詢,又是可以執行的,怪了。
後來一個欄位一個欄位去掉,才發現,原來PASSWORD是OLEDB的一個保留字,拿來做欄位名,寫在SQL中要轉義,寫成
insert into AAAA(UID,PhoneNo,Address,[Password]) values(xxxxxxx),就正常了。
這幾個問題忙得實在不太值,都是一些約定上的東西,要自己一點一點分析出來,效率太低了。