代码之家  ›  专栏  ›  技术社区  ›  Presidenten

SQL Ce 3.5部署问题——关于C++与C++之间的互操作问题

  •  1
  • Presidenten  · 技术社区  · 16 年前

    我们遇到一个C应用程序正在使用SQL CE 3.5的情况。为了允许遗留程序使用它的一些特性,我们已经产生了一个C++ DLL,它使用互操作来提取它需要的C语言程序所需的信息。为此,c程序需要访问数据库。这不是一个非常复杂的场景。

    当尝试使用私有安装进行部署时,会出现一些问题。 C程序没有问题,它可以访问数据库并在没有任何问题的情况下使用它。

    但是,当试图通过C++互操作访问C语言程序中的函数时,强制C语言程序访问数据库,我们得到了一个例外:“……提供程序:Soal.DATA,SqLSServCE 3.5没有安装”。

    这显然是因为我们无法将app.config文件添加到正在执行的程序中。

    我们怎么能避开这个?还有别的办法解决这个问题吗?任何其他形式的sql ce 3.5安装方法都是不可能的。所以我们必须让它发挥作用。

    当做,

    第页

    编辑:

    我不是直接反对sql ce,而是通过linq2sql。我试图将配置文件添加到我所有的dll中,但没有帮助。似乎只有可执行文件有app.config才重要。

    引发的异常显示-未安装提供程序system.data.sqlserverce.3.5。

    根据堆栈跟踪调用的最新函数是 system.data.linq.sqlclient.sqlprovider.system.data.linq.provider.iprovider.initialize(…)。

    编辑2

    我已经添加了部署工作所需的所有文件。如上所述,如果我使用程序dll(它使用linq 2 sql)通过一个带有app.config文件的.net可执行文件,该文件指定在哪里查找sql ce 3.5dll,那么它就可以工作。部署将 只处理文件时,需要app.config文件。

    问题是我们必须通过一个C++的可执行文件来使用DLL文件,它没有告诉.NET的地方去查找SQL CE 3.5 DLL。

    5 回复  |  直到 16 年前
        1
  •  1
  •   Joachim Kerschbaumer    16 年前

    将以下文件添加到应用程序文件夹:

    • sqlceca35.dll
    • sqlcecompact35.dll
    • sqlceer35e.dll
    • sqlceme35.dll
    • sqlceoledb35.dll
    • sqlceqp35.dll
    • sqlcese35.dll
    • 系统.data.sqlserverce.dll

    那就行了。

    如果您没有在目标计算机上明确安装sqlserverce3.5(我认为大多数部署都是这样),那么这是必要的。

        2
  •  0
  •   OJ.    16 年前

    您可以添加一个foo.dll.config文件,并确保它位于dll旁边。您只需要确保您的dll中有代码来确定它在磁盘上的位置,并从相同的位置读取配置。

    祝你好运!

        3
  •  0
  •   Sunlight    16 年前

    这显然是因为我们无法将app.config文件添加到正在执行的程序中。

    为什么不?好的,所以visual studio不会自动构建配置文件并重命名它并将其移动到输出目录,但是您是否尝试过 .exe.config 与C++应用程序一起使用文件?

        4
  •  0
  •   KevinKevin    16 年前

    我还看到了一个实例,其中gac中的system.data.sqlserverce.dll是错误的文件版本,我已经从命令提示符中替换了gac中的dll。

    关于文件必须在文件夹中的观点是正确的,除非gac被多个版本搞糊涂了

        5
  •  0
  •   ErikEJ    15 年前

    不要使用LINQ,但是对于C++程序调用的方法,请使用SqLcCeNeNeCT、SqcCeCMOMMand等。