我有以下内容,通过控制台应用程序使用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 :(得分:2)
当然可以在Kentico之外使用Kentico API。最近,我在这个主题上发表了article。但是,这篇文章展示了更新版Kentico的可能性。但回到你的问题......
CMS.CMSHelper.CMSContext.Init();
方法期望app.config或web.config中存在名为“CMSConnectionString”的连接字符串。
您可以在应用程序生命周期的任何时候调用此方法,但必须在使用任何其他Kentico CMS API之前进行此操作。
因此,在致电CMS.DataEngine
之前,您不应该触及CMS.*
或任何其他CMSContext.Init()
命名空间。
调用该方法后,您可以开始使用无参数重载ConnectionHelper.GetConnection()
,但我建议您利用Kentico提供的Info-Provider pattern,而不是通过CMS.DataEngine
使用直接数据库访问
例如,这就是delete users:
的方式// Get the user
UserInfo deleteUser = UserInfoProvider.GetUserInfo("MyNewUser");
// Delete the user
UserInfoProvider.DeleteUser(deleteUser);
答案 1 :(得分:0)
除非特别需要创建控制台应用程序来执行任务,否则我建议避免使用控制台应用程序,而是创建自定义scheduled task。
如果您正在使用Web应用程序项目类型,则可以在项目的App_Code文件夹中编写您的任务需要执行的代码 - 或者在CMSAppCode项目中编写代码。这样您就不必担心访问数据库或引用使用Kentico API所需的所有DLL。