无法访问 SQLite 数据库表单窗口服务



我为Outlook 2010开发了一个加载项。 在 Outlook 启动时,ADD-in 将所有邮件主题存储在 SQLite 数据库中。

现在,我必须创建一个Windows服务,该服务也将访问相同的数据库,并将其发布在基于休息的服务上。但是我收到一个错误。

Windows 服务无法访问该数据库。

 static void Main()
    {
        //try
        //{
            //=======Connection string=============
        string dbfile = @"D:testdatabase.db";
        sql_con = new SQLiteConnection
            ("Data Source= " + dbfile + ";Version=3;New=False;Compress=True;");
            //=======Open Connection=============
            sql_con.Open();
            //=======Create dataset and store value in dataset===================
            sql_cmd = sql_con.CreateCommand();
            string CommandText = "select * from mailbackup";
            DB = new SQLiteDataAdapter(CommandText, sql_con);
            //DS.Reset();
            DB.Fill(DS);
            //=======Store dataset value in text file============
            StringBuilder str = new StringBuilder();
            int rows = DS.Tables[0].Rows.Count;
            for (int i = 0; i < rows;i++ )
            {
                str.AppendLine(DS.Tables[0].Rows[i].ItemArray[0].ToString());
                str.AppendLine(DS.Tables[0].Rows[i].ItemArray[1].ToString());
                str.AppendLine(DS.Tables[0].Rows[i].ItemArray[2].ToString());
                str.AppendLine(DS.Tables[0].Rows[i].ItemArray[3].ToString());
                str.AppendLine(DS.Tables[0].Rows[i].ItemArray[4].ToString());
                str.AppendLine(DS.Tables[0].Rows[i].ItemArray[5].ToString());
                str.AppendLine(DS.Tables[0].Rows[i].ItemArray[6].ToString());
                str.AppendLine(DS.Tables[0].Rows[i].ItemArray[7].ToString());
                str.AppendLine(DS.Tables[0].Rows[i].ItemArray[8].ToString());
                StreamWriter sw = null;
                sw = new StreamWriter(AppDomain.CurrentDomain.BaseDirectory + "\LogFile.txt", true);
                sw.WriteLine(DateTime.Now.ToString() + ": " + str.ToString());
                sw.Flush();
                sw.Close();
            }
                //=======Close Connection=============
                sql_con.Close();
            //storedata();
        //}
        //catch(System.Exception ex)
        //{
        //}
    }

我收到错误

SQLite.NET中发生了类型为"Finisar.SQLite.SQLiteException"的未处理异常.dll

其他信息:不支持的文件格式

当我们更改连接字符串时,它工作正常

 sql_con = new SQLiteConnection
        ("Data Source= " + dbfile + ";Version=3;New=True;Compress=True;");

创建新数据库并打开连接,但在使用 sqlite 浏览器或 SQLiteStudio 创建表后,它开始抛出相同的错误。

在 Windows 服务中运行哪种类型的应用程序并不重要。问题来自SQLite组件。

mscorlib 中发生了类型为"System.IO.FileLoadException"的未处理异常.dll 其他信息:混合模式程序集是针对运行时版本 v2.0.50727 构建的,如果没有其他配置信息,则无法在 4.0 运行时中加载。

为了使用 CLR 2.0 混合模式程序集,您需要修改 App.Config 文件以包括:

<?xml version="1.0"?>
 <configuration>
  <startup useLegacyV2RuntimeActivationPolicy="true">
     <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
  </startup>

关键是 useLegacyV2RuntimeActivationPolicy 标志。这会导致 CLR 使用最新版本 (4.0) 加载混合模式程序集。没有这个,它将无法工作。

请注意,这仅适用于混合模式 (C++/CLI) 程序集。可以加载所有托管 CLR 2 程序集,而无需在 app.config 中指定此项。

无论如何,Office 服务器端自动化的注意事项一文指出了以下内容:

Microsoft 目前不建议也不支持从任何无人参与、非交互式客户端应用程序或组件(包括 ASP、ASP.NET、DCOM 和 NT 服务)自动化Microsoft Office 应用程序,因为在此环境中运行 Office 时 Office 可能会表现出不稳定的行为和/或死锁。

如果要生成在服务器端上下文中运行的解决方案,则应尝试使用已安全执行无人参与的组件。或者,您应该尝试找到至少允许部分代码在客户端运行的替代方法。如果使用服务器端解决方案中的 Office 应用程序,则该应用程序将缺少成功运行所需的许多功能。此外,您将承担整体解决方案稳定性的风险。

最新更新