2016-01-22 61 views
0

使用Kentico 7 API我有以下,使用Kentico API 7通過一個控制檯應用程序:經由控制檯應用程序

String connectionString = CMS.DataEngine.ConnectionHelper.GetConnectionString("MyConnString"); 
Console.WriteLine("connectionString ? " + connectionString); 
//CMS.DataEngine.GeneralConnection 
CMS.DataEngine.GeneralConnection conn = CMS.DataEngine.ConnectionHelper.GetConnection(connectionString); 
conn.Open(); 
Console.WriteLine("connection is open? " + conn.IsOpen()); 

CMS.CMSHelper.CMSContext.Init(); 
Console.WriteLine("CurrentSiteID " + CMS.CMSHelper.CMSContext.CurrentSiteID); 

的連接是打開的。我得到錯誤 Console.WriteLine("CurrentSiteID " + CMS.CMSHelper.CMSContext.CurrentSiteID);

,上面寫着連接未初始化。有幫助嗎?

+0

你不能做到這一點! CMSContext未在控制檯應用程序中初始化,我不確定您是否可以在控制檯中正確初始化它。 這樣做的原因是什麼? –

+0

kentico 7文檔說該代碼行必須位於外部應用程序中。如果這是不正確的,那麼我對kentico API 7有什麼用? – KenticoLover

+0

「kentico 7文檔說明,代碼行必須位於外部應用程序中」 - 脫離語境的此短語意味着什麼都沒有。我之前使用過Kentico 7。你試圖達成什麼目標? –

回答

2

肯定可以在Kentico本身之外使用Kentico API。最近,我發表了關於此主題的article。然而,文章證明了在更新版本的Kentico上的可能性。但回到你的問題...

CMS.CMSHelper.CMSContext.Init();方法期望名爲「CMSConnectionString」的連接字符串存在於你的app.config或web.config中。

documentation還說

你可以在你的應用程序的生命週期中的任何一點調用此方法,但你使用任何其他Kentico CMS API之前,它必須發生。

所以你不應該接觸CMS.DataEngine或任何其他CMS.*命名空間,你叫CMSContext.Init()之前。 一旦你打電話,你可以開始使用無參數的重載ConnectionHelper.GetConnection()這種方法,但我會建議你採取Kentico提供,而不是通過CMS.DataEngine使用直接DB訪問Info-Provider pattern的優勢。

舉例來說,你這是怎麼delete users

// Get the user 
UserInfo deleteUser = UserInfoProvider.GetUserInfo("MyNewUser"); 

// Delete the user 
UserInfoProvider.DeleteUser(deleteUser); 
+0

確切需要什麼。一個很大的幫助。謝謝 – KenticoLover

+0

請將我的答案標記爲正確答案。 – rocky

0

除非有特定需要創建一個控制檯應用程序來執行你的任務,那麼我會建議避免一個控制檯應用程序,而是創建一個自定義scheduled task

你可以寫你的任務需要你的項目的App_Code文件夾內執行的代碼 - 如果你正在使用一個Web應用程序項目類型或CMSAppCode項目中。這樣您就不必擔心訪問數據庫或引用所有需要使用Kentico API的DLL。

+0

您提到計劃任務的kentico api版本是什麼?我正在使用api 7 – KenticoLover

+0

至少從第4版開始就已經存在。以下是v7的文檔:http://devnet.kentico.com/docs/7_0/devguide/index.html。如果您不確定如何繼續,請告訴我。 – Jerreck

+0

不幸的是我需要在控制檯應用程序中執行此操作。我不知道如何在這裏繼續 – KenticoLover