Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 如何部署SQL Server Compact Edition 4.0?_Sql Server 2008_Deployment_Sql Server Ce_Ado_Xcopy - Fatal编程技术网

Sql server 2008 如何部署SQL Server Compact Edition 4.0?

Sql server 2008 如何部署SQL Server Compact Edition 4.0?,sql-server-2008,deployment,sql-server-ce,ado,xcopy,Sql Server 2008,Deployment,Sql Server Ce,Ado,Xcopy,如何部署 SQL Server Compact Edition(当前版本为4.0)是: 软件开发人员可用于构建Windows桌面应用程序的免费嵌入式数据库。它占地面积小,支持在应用程序文件夹中私有部署其二进制文件 但实际上如何部署它呢 微软说它可以 微软也表示它不可能 有些人有,但他们没有详细说明完成部署所需的细节 问题是,除非ADO OLEdb提供程序已注册,否则无法使用它。必须以管理员身份注册OLEdb提供程序。这意味着SQL Server Compact edition对于非管理员用

如何部署


SQL Server Compact Edition(当前版本为4.0)是:

软件开发人员可用于构建Windows桌面应用程序的免费嵌入式数据库。它占地面积小,支持在应用程序文件夹中私有部署其二进制文件

但实际上如何部署它呢

  • 微软说它可以
  • 微软也表示它不可能
  • 有些人有,但他们没有详细说明完成部署所需的细节
问题是,除非ADO OLEdb提供程序已注册,否则无法使用它。必须以管理员身份注册OLEdb提供程序。这意味着SQL Server Compact edition对于非管理员用户将失败

SQL Server Compact 4.0附带一个
redist_enu.txt
文件:

列出的.exe文件各自将其附带的组件安装到目标计算机上的特定位置。这有助于确保可维护性和技术支持。这些.exe文件中包含的.dll文件在此redist.txt中也可以单独使用。但是,这些单独的.dll的分发可能会导致可用性问题。有关更多详细信息,请参阅

通过面包屑进行私有部署检测:不支持仅对本机堆栈进行私有部署,不支持通过Assembly.LoadFrom()、.local文件显式加载SQL Server Compact程序集,也不支持使用DLL/COM重定向策略,这可能会导致可维护性问题。有关更多信息,请参阅和

Microsoft SQL Server Compact 4.0 SSCERuntime_x86-ENU.exe
SSCERuntime_x86-DEU.exe
SSCERuntime_x86-FRA.exe
SSCERuntime_x86-JPN.exe
SSCERuntime_x86-RUS.exe
SSCERuntime_x86-ESN.exe
SSCERuntime_x86-ITA.exe
SSCERuntime_x86-KOR.exe
SSCERuntime_x86-CHT.exe
SSCERuntime_x86-CHS.exe
SSCERuntime_x64-ENU.exe
SSCERuntime_x64-DEU.exe
SSCERuntime_x64-FRA.exe
SSCERuntime_x64-JPN.exe
SSCERuntime_x64-RUS.exe
SSCERuntime_x64-ESN.exe
SSCERuntime_x64-ITA.exe
SSCERuntime_x64-KOR.exe
SSCERuntime_x64-CHT.exe
SSCERuntime_x64-CHS.exe
sqlcese40.dll
sqlceqp40.dll
sqlceoledb40.dll
sqlceca40.dll
sqlceme40.dll
sqlcecompact40.dll
sqlceer40en.dll
sqlceer40cn.dll/sqlceer40zh CHS.dll
sqlceer40de.dll
sqlceer40es.dll
sqlceer40fr.dll
sqlceer40it.dll
sqlceer40ja.dll
sqlceer40ko.dll
sqlceer40tw.dll/sqlceer40zh CHT.dll
sqlceer40ru.dll
System.Data.SqlServerCe.dll
System.Data.SqlServerCe.Entity.dll

但它没有提供任何关于如何重新发布SQLServerCompact4.0的信息

在未记录的
程序文件
文件夹中随机拼音,我找到了7个DLL:

C:\Program Files\Microsoft SQL Server Compact Edition\v4.0\
      sqlceoledb40.dll
      sqlceqp40.dll
      sqlcese40.dll
      sqlceca40.dll
      sqlcecompact40.dll
      sqlceer40EN.dll
      sqlceme40.dll
注意:还有一些具有更多DLL的子文件夹

我尝试将这7个dll复制到一个文件夹,并尝试使用以下方法打开一个dll:

但它失败,出现
0x80004005未指定错误


我已经创建了解决方案

SQL Server Compact Edition由7个DLL组成:

  • sqlceme40.dll
    未记录的本机平面API库(.net
    System.Data.SqlServerCe.dll
    程序集是此dll的包装器)
  • sqlceca40.dll
    实现
    引擎
    复制
    错误
    和一些其他COM对象的COM dll
  • sqlceoledb40.dll
    为SSCE实现OLEdb提供程序的COM dll(允许使用ADO)
  • sqlcese40.dll
    未知
  • sqlceqp40.dll
    未知
  • sqlcecompact40.dll
    未知
  • sqlceer40en.dll
    未知
尝试简单地发布这些DLL的问题是,其中两个是COM对象。COM对象dll需要注册,例如:

问题是注册COM对象需要管理权限()。这意味着您的用户将

  • 必须安装应用程序(您不想这样做)
  • 要求用户具有管理权限(您不希望这样做)
幸运的是,从2001年Windows XP开始,Microsoft解决了这个常见问题:

首先,您将声明您的应用程序在SQL Server Compact Edition 4.0上具有“依赖性”。您可以通过编写程序集清单来执行此操作:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> 
    <assemblyIdentity 
        version="1.0.0.0"
        processorArchitecture="X86"
        name="client"
        type="win32"
    /> 

    <description>Hyperion Pro</description> 

    <!-- We have a dependancy on SQL Server CE 4.0 -->
    <dependency>
        <dependentAssembly>
            <assemblyIdentity
                type="win32"
                name="Microsoft.SQLSERVER.CE.4.0"
                version="4.0.0.0" processorArchitecture="x86"
            />
        </dependentAssembly>
    </dependency>

海伯龙专业版

真的
您可以将此文件放在可执行文件旁边(作为
Hyperion.exe.manifest
),也可以将其作为
RT\u manifest
资源构建到应用程序中

请注意,我们对名为Microsoft.SQLSERVER.CE.4.0的as程序集具有依赖性。我们首先通过创建一个名为的目录来创建此程序集:

Microsoft.SQLSERVER.CE.4.0

部署应用程序时,您将把构成此“程序集”的所有7个dll与一个特殊的
.manifest
文件一起放入此
Microsoft.SQLSERVER.CE.4.0
子文件夹:


Sql Server Ce 4.0 SP1的

我没有解决部署中的所有繁琐问题,而是选择将安装文件本身作为EmbeddedResource包含到我的exe中,并做了以下小帮助:

公共静态类重分类器
{
私有静态只读ILog Log=LogManager.GetLogger(
MethodBase.GetCurrentMethod().DeclaringType);
>regsvr32 sqlceca40.dll
>regsvr32 sqlceoledb40.dll
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> 
    <assemblyIdentity 
        version="1.0.0.0"
        processorArchitecture="X86"
        name="client"
        type="win32"
    /> 

    <description>Hyperion Pro</description> 

    <!-- We have a dependancy on SQL Server CE 4.0 -->
    <dependency>
        <dependentAssembly>
            <assemblyIdentity
                type="win32"
                name="Microsoft.SQLSERVER.CE.4.0"
                version="4.0.0.0" processorArchitecture="x86"
            />
        </dependentAssembly>
    </dependency>
|--Your App Dir
   |--x86 (x86 sql ce binaries)
   |--amd64 (amd64 sql ce binaries)