2016-01-22 37 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