最近接了個美國的小項目,主要需求是把盤點機匯出的資料(DBF格式)和另外的資料(csv格式)合并產生新的資料表,方便查詢錯誤修正。對方沒有安裝ms Access,考慮到對方使用方便,就採用了sqlite,開發語言使用.net 2.0。 下面簡單羅列下用過程中的幾點體會。
Provider:通過使用其他開源軟體的體會和網上搜尋,Provider決定使用System.Data.SQLite。
事務(DbTransaction):因為涉及資料匯入合并,批量插入和更新等工作是必須的了,一開始沒有顯式調用事務,速度別提多慢,於是想當然覺得sqlite速度比access還慢,後來搜尋發現,原來SQLite 預設為每個操作啟動一個事務,其實這是資料庫操作的基本常識,不僅僅Sqlite需要注意這些,當然Access等不支援事務的不在此列。
索引(index):資料匯入合并,插入和更新時都需要查詢資料是否有重複以及存在,所以索引是不可以缺少的。
SQLiteParameter:批量插入的時候,為了省懶事,使用string.format來格式化插入,結果碰到“near "s": syntex error.”,經過跟蹤,原來是單引號(')的問題,看來還是乖乖使用SQLiteParameter來規範地匯入,並可以避免很多字元上的問題。
Update ...From(Cross Join in Update):Sqlite 不支援類似
“UPDATE tbl1 SET col2 = tbl2.col2
FROM table1 tbl1 INNER JOIN table2 tbl2 ON tbl1.col1 = tbl2.col1”
的update,替代的解決辦法是:
UPDATE table1 SET col2 = (select col2 from table2 where table2.col1=table1.col1 limit 1)
where exists(select * from table2 where table2.col1=table1.col1);
查詢分析器:我選擇SQLite Administrator,後來發現Firefox的外掛程式(addons) Sqlite Manager也是不錯的選擇。
下面順便列些和DotNet開發的和SQLite有關的項目:
Convert SQL Server DB to SQLite DB:C# utility to automatically do the conversion from SQL Server DB to SQLite DB(一個把ms SQL Server資料庫自動轉為SQLite DB的工具,包括原始碼)。
SQLite Membership, Role, and Profile Providers:Complete,
production-ready Membership, Role, and Profile providers for SQLite.
Includes instructions for migrating data between SQL Server and SQLite.