2012-05-28 39 views
0

我重新設計了我的項目3次,最後想到在我的應用程序變得太過失控之前我會問。我正在構建一個複雜的系統監控和報告生成應用程序。我一直在努力弄清楚哪種數據庫方法最適合我的情況,我認爲它是SQL Server CE,因爲我在一臺工作筆記本電腦上,可能需要長達一週的時間才能安裝它。如果有更友好的應用程序,我應該使用,我願意提供建議。使用SQL Server CE插入到數據庫中

假設我堅持使用SQL Server CE,將記錄插入到具有許多列的.sdf文件中的最佳方法是什麼?例如,DB中的表格可以包含100列。它現在可以正常工作,但似乎每插入一行都需要大約1秒。該代碼看起來是這樣的(最終將有更多列):

con.Open(); 

SqlCeTransaction trans = con.BeginTransaction(); 

String insertRecord = "INSERT INTO AS400_Objects(projectName, obBuildObjectName, " + 
        "obBuildLibrary, obBuildType, obBuildExtendedAttribute, obBuildFormatLevel, " + 
        "obBuildUserAttribute, obBuildChangeDate, obBuildCreationDate, " + 
        "obBuildCreatorSystem, obBuildCreatorUserProfile, obBuildJournal, " + 
        "obBuildJournalStatus, obBuildLastUsedDate, obBuildObjectSize, obBuildOwner, " + 
        "obBuildRestoreDate, obBuildSaveDate, obBuildSourceFile, " + 
        "obBuildSourceFileUpdatedDate, obBuildTextDescription, obBuildSystemVersion)" + 
        "VALUES(@projectName, @obBuildObjectName, @obBuildLibrary, @obBuildType, " + 
        "@obBuildExtendedAttribute, @obBuildFormatLevel, @obBuildUserAttribute, " + 
        "@obBuildChangeDate, @obBuildCreationDate, @obBuildCreatorSystem, " + 
        "@obBuildCreatorUserProfile, @obBuildJournal, @obBuildJournalStatus, " + 
        "@obBuildLastUsedDate, @obBuildObjectSize, @obBuildOwner, @obBuildRestoreDate, " + 
        "@obBuildSaveDate, @obBuildSourceFile, @obBuildSourceFileUpdatedDate, " + 
        "@obBuildTextDescription, @obBuildSystemVersion)"; 

SqlCeCommand cmd = new SqlCeCommand(insertRecord, con); 
cmd.Transaction = trans; 

cmd.Parameters.Clear(); 
cmd.Parameters.AddWithValue("@projectName", packageName); 
cmd.Parameters.AddWithValue("@obBuildObjectName", od[i].getValue(ObjectDescription.NAME).ToString()); 
cmd.Parameters.AddWithValue("@obBuildLibrary", od[i].getValue(ObjectDescription.LIBRARY).ToString()); 
cmd.Parameters.AddWithValue("@obBuildType", od[i].getValue(ObjectDescription.TYPE).ToString()); 
cmd.Parameters.AddWithValue("@obBuildExtendedAttribute", od[i].getValue(ObjectDescription.EXTENDED_ATTRIBUTE).ToString()); 
cmd.Parameters.AddWithValue("@obBuildFormatLevel", ""); 
cmd.Parameters.AddWithValue("@obBuildUserAttribute", od[i].getValue(ObjectDescription.USER_DEFINED_ATTRIBUTE).ToString()); 
cmd.Parameters.AddWithValue("@obBuildChangeDate", changeDate); 
cmd.Parameters.AddWithValue("@obBuildCreationDate", creationDate); 
cmd.Parameters.AddWithValue("@obBuildCreatorSystem", od[i].getValue(ObjectDescription.CREATOR_SYSTEM).ToString()); 
cmd.Parameters.AddWithValue("@obBuildCreatorUserProfile", od[i].getValue(ObjectDescription.CREATOR_USER_PROFILE).ToString()); 
cmd.Parameters.AddWithValue("@obBuildJournal", od[i].getValue(ObjectDescription.JOURNAL).ToString()); 
cmd.Parameters.AddWithValue("@obBuildJournalStatus", journalStatus); 
cmd.Parameters.AddWithValue("@obBuildLastUsedDate", lastUsedDate); 
cmd.Parameters.AddWithValue("@obBuildObjectSize", od[i].getValue(ObjectDescription.OBJECT_SIZE).ToString()); 
cmd.Parameters.AddWithValue("@obBuildOwner", od[i].getValue(ObjectDescription.OWNER).ToString()); 
cmd.Parameters.AddWithValue("@obBuildRestoreDate", restoreDate); 
cmd.Parameters.AddWithValue("@obBuildSaveDate", saveDate); 
cmd.Parameters.AddWithValue("@obBuildSourcefile", od[i].getValue(ObjectDescription.SOURCE_FILE).ToString()); 
cmd.Parameters.AddWithValue("@obBuildSourceFileUpdatedDate", sourceFileUpdatedDate); 
cmd.Parameters.AddWithValue("@obBuildTextDescription", od[i].getValue(ObjectDescription.TEXT_DESCRIPTION).ToString()); 
cmd.Parameters.AddWithValue("@obBuildSystemVersion", od[i].getValue(ObjectDescription.SYSTEM_LEVEL).ToString()); 

cmd.ExecuteNonQuery(); 
trans.Commit(CommitMode.Immediate); 

cmd.Dispose(); 

con.Close(); 
con.Dispose(); 

基於這種情況,是有什麼我可以做以提高查詢的性能?我來自AS400大型機世界,其中1秒鐘會給你數百甚至數千行。該應用程序的最終結果是它將創建一個輸出文件發送到某處,然後雙擊該文件將所有這些數據加載到遠程機器上。我已經看過SqlCEAdapter,但一直沒有找到一個很好的解釋如何使用它來適應我的情況。

在此先感謝!

+0

AS400_Objects有多少個索引?你能發表他們的定義嗎? – Dennis

+0

我必須承認,我只是在學習PC數據庫的世界,所以請原諒我,如果我有點失落。 :)我使用的是Visual Studio數據庫瀏覽器,唯一的唯一主鍵是ID字段,每插入一條記錄就會增加一個。表中的每個其他字段都設置爲允許空值是,唯一號和主鍵號。我也使用PHP編程,並且可以在任何字段上設置索引,但是我一直無法找到在DB Explorer中設置字段索引的方法。 – user1420914

回答

0

您是否聽說過數據庫規範化?這避免了數據的重複,並減少了每個INSERT所需的列數。如果沒有CommitMode,這個過程也會運行得更快。最後,您可以使用SqlCeUpdateRecord和TableDirect繞過查詢處理程序進行快速插入。

+0

感謝您的回覆!我沒有聽說過db規範化,但我今天會在網上搜索它,看看我能找到什麼東西! – user1420914

相關問題