Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Làm thế nào để triển khai SQL Server Compact Edition 4.0?

tôi đã tạo ra giải pháp.

SQL Server Compact Edition bao gồm 7 dlls:

  • sqlceme40.dll Thư viện API phẳng, nguyên bản, không có tài liệu (The .net System.Data.SqlServerCe.dll assembly là một trình bao bọc xung quanh dll này)
  • sqlceca40.dll Một dll COM triển khai Engine , Replication , Error và một số đối tượng COM khác
  • sqlceoledb40.dll Một dll COM triển khai một nhà cung cấp OLEdb cho SSCE (cho phép sử dụng ADO)
  • sqlcese40.dll không xác định
  • sqlceqp40.dll không xác định
  • sqlcecompact40.dll không xác định
  • sqlceer40en.dll không xác định

Vấn đề khi cố gắng vận chuyển những con dlls này đơn giản là hai trong số chúng là COM các đối tượng. Đối tượng COM dll cần được đăng ký , ví dụ:

>regsvr32 sqlceca40.dll
>regsvr32 sqlceoledb40.dll

Vấn đề là đăng ký đối tượng COM yêu cầu quản trị đặc quyền ( sử dụng giải pháp toàn cầu để giải quyết vấn đề cục bộ ). Điều này có nghĩa là người dùng của bạn sẽ

  • phải cài đặt ứng dụng của bạn (mà bạn không muốn làm)
  • yêu cầu người dùng của bạn có quyền quản trị (bạn không muốn làm như vậy)

May mắn thay, bắt đầu từ năm 2001 với Windows XP, Microsoft đã giải quyết được vấn đề COMmon này: Đăng ký- COM miễn phí .

Trước tiên, bạn sẽ tuyên bố rằng ứng dụng của bạn có "sự phụ thuộc" trên SQL Server Compact Edition 4.0. Bạn thực hiện việc này bằng cách tạo một tệp kê khai hợp ngữ:

<?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>
    <!-- We are high-dpi aware on Windows Vista -->
    <asmv3:application xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
        <asmv3:windowsSettings
            xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
            <dpiAware>true</dpiAware>
        </asmv3:windowsSettings>
    </asmv3:application>

    <!-- We were designed and tested on Windows 7 -->
    <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
        <application>
            <!--The ID below indicates application support for Windows 7 -->
            <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
            <!--The ID below indicates application support for Windows Vista -->
            <!--supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/-->
        </application>
    </compatibility>

    <!-- Disable file and registry virtualization -->
    <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
        <security>
            <requestedPrivileges>
                <requestedExecutionLevel level="asInvoker" uiAccess="false"/>
            </requestedPrivileges>
        </security>
    </trustInfo>
</assembly>

Bạn có thể đặt tệp này bên cạnh tệp thực thi của bạn (dưới dạng Hyperion.exe.manifest ), hoặc bạn có thể xây dựng nó vào ứng dụng của mình dưới dạng RT_MANIFEST tài nguyên.

Lưu ý rằng chúng ta có một sự phụ thuộc vào như assembly được gọi là Microsoft.SQLSERVER.CE.4.0 . Trước tiên, chúng tôi tạo lắp ráp này bằng cách tạo thư mục được gọi là:

Khi bạn triển khai ứng dụng của mình, bạn sẽ đặt tất cả 7 dll bao gồm "assembly" này vào Microsoft.SQLSERVER.CE.4.0 này thư mục con, cùng với .manifest đặc biệt tệp:

📁C:\
╰──📁Users
   ╰──📁Ian
      ╰──📁AppData
         ╰──📁Local
            ╰──📁Hyperion Pro
               ├──📄Hyperion.exe
               ├──📄Hyperion.exe.manifest
               ╰──📁Microsoft.SQLSERVER.CE.4.0
                  ├──📄sqlceme40.dll
                  ├──📄sqlceca40.dll
                  ├──📄sqlceoledb40.dll
                  ├──📄sqlcese40.dll
                  ├──📄sqlceqp40.dll
                  ├──📄sqlcecompact40.dll
                  ├──📄sqlceer40en.dll
                  ╰──📄Microsoft.SQLSERVER.CE.4.0.manifest

Nói cách khác, thư mục ứng dụng chứa ứng dụng của bạn và Microsoft.SQLSERVER.CE.4.0 thư mục:

 Directory of C:\Users\Ian\AppData\Local\Hyperion Pro

05/29/2012  09:23 AM         1,899,008 Hyperion.exe
05/28/2012  01:46 PM             1,587 Hyperion.exe.manifest
05/29/2012  09:27 AM    <DIR>          Microsoft.SQLSERVER.CE.4.0
           2 File(s)      1,900,675 bytes
           1 Dir(s)  20,851,503,104 bytes free

Phần tiếp theo của nhiệm vụ của bạn là xác định Microsoft.SQLSERVER.CE.4.0.manifest tập tin. COM miễn phí đăng ký cho phép một tệp kê khai khai báo tất cả các đối tượng COM và clsid của chúng. Điều này đòi hỏi rất nhiều kỹ thuật đảo ngược. Nhưng tệp kê khai hợp ngữ cho SQL Server Compact Edition 4.0 là:

Microsoft.SQLSERVER.CE.4.0.manifest :

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">

<assemblyIdentity 
       type="win32"
       name="Microsoft.SQLSERVER.CE.4.0"
       processorArchitecture="x86"
       version="4.0.0.0" />

<!-- OLEDB Provider -->
<file name = "sqlceoledb40.dll">
    <comClass
            description = "Microsoft SQL Server Compact OLE DB Provider for Windows"
            clsid="{2006C53A-C915-41EA-BAA9-9EAB3A1FBF97}"
            threadingModel = "Both"
            progid = "Microsoft.SQLSERVER.CE.OLEDB.4.0" />
</file>

<!-- Native flat engine library -->
<file name="sqlceme40.dll" />

<!-- Engine and Replication COM object -->
<file name="sqlceca40.dll">
    <comClass description="Active SSCE Engine Object"
            clsid="{68D45319-3702-4837-9F8E-DA6845D82482}"
            threadingModel="Both"
            progid="SSCE.Engine.4.0" />
    <comClass description="SSCE Error Object"
            clsid="{36228F21-B5C7-4054-8DC2-47D3E236E8B5}"
            threadingModel="Both"
            progid="SSCE.Error.4.0" />
    <comClass description="SSCE Param Object"
            clsid="{0B3A7B75-A9B0-4580-9AA5-1A7DA47AD1CB}"
            threadingModel="Both"
            progid="SSCE.Param.4.0" />
    <comClass description="Active SSCE Replication Object"
            clsid="{11D5B2D4-26A4-44F5-A48B-0FAC3A919ED8}"
            threadingModel="Both"
            progid="SSCE.Replication.4.0" />
    <comClass description="Active SSCE remote data access Object"
            clsid="{58BC9AD6-BF11-40B3-9AB1-E3F2ED784C08}"
            threadingModel="Both"
            progid="SSCE.RemoteDataAccess.4.0" />

    <typelib tlbid="{CE4AACFA-3CFD-4028-B2D9-F272314F07C8}"
            version="4.0" 
            helpdir=""/>
</file>

<comInterfaceExternalProxyStub 
    name="ISSCEEngine"
    iid="{10EC3E45-0870-4D7B-9A2D-F4F81B6B7FA2}"
    proxyStubClsid32="{00020424-0000-0000-C000-000000000046}"
    baseInterface="{00000000-0000-0000-C000-000000000046}"
    tlbid = "{CE4AACFA-3CFD-4028-B2D9-F272314F07C8}" />

<comInterfaceExternalProxyStub 
    name="ISSCEError"
    iid="{31155A3B-871D-407F-9F73-DEBFAC7EFBE3}"
    proxyStubClsid32="{00020424-0000-0000-C000-000000000046}"
    baseInterface="{00000000-0000-0000-C000-000000000046}"
    tlbid = "{CE4AACFA-3CFD-4028-B2D9-F272314F07C8}" />

<comInterfaceExternalProxyStub 
    name="ISSCERDA"
    iid="{4F04F79D-1FF1-4DCD-802B-3D51B9356C14}"
    proxyStubClsid32="{00020424-0000-0000-C000-000000000046}"
    baseInterface="{00000000-0000-0000-C000-000000000046}"
    tlbid = "{CE4AACFA-3CFD-4028-B2D9-F272314F07C8}" />

<comInterfaceExternalProxyStub 
    name="ISSCEParams"
    iid="{A78AFF90-049C-41EC-B1D8-665968AAC4A6}"
    proxyStubClsid32="{00020424-0000-0000-C000-000000000046}"
    baseInterface="{00000000-0000-0000-C000-000000000046}"
    tlbid = "{CE4AACFA-3CFD-4028-B2D9-F272314F07C8}" />

<comInterfaceExternalProxyStub 
    name="ISSCEParam"
    iid="{A9876C60-2667-44E5-89DB-E9A46ED392C0}"
    proxyStubClsid32="{00020424-0000-0000-C000-000000000046}"
    baseInterface="{00000000-0000-0000-C000-000000000046}"
    tlbid = "{CE4AACFA-3CFD-4028-B2D9-F272314F07C8}" />

<comInterfaceExternalProxyStub 
    name="ISSCEErrors"
    iid="{C40143CA-E9F9-4FF4-B8B4-CC02C064FC1B}"
    proxyStubClsid32="{00020424-0000-0000-C000-000000000046}"
    baseInterface="{00000000-0000-0000-C000-000000000046}"
    tlbid = "{CE4AACFA-3CFD-4028-B2D9-F272314F07C8}" />

<comInterfaceExternalProxyStub 
    name="ISSCEMerge"
    iid="{C6EB397F-D585-428D-A4F4-454A1842CB47}"
    proxyStubClsid32="{00020424-0000-0000-C000-000000000046}"
    baseInterface="{00000000-0000-0000-C000-000000000046}"
    tlbid = "{CE4AACFA-3CFD-4028-B2D9-F272314F07C8}" />

<file name="sqlceqp40.dll" />
<file name="sqlcese40.dll" />
<file name="sqlcecompact40.dll" />
<file name="sqlceer40EN.dll" />

</assembly>

Điểm mấu chốt cuối cùng là, theo cách tương tự, chúng ta có sự phụ thuộc vào một hợp ngữ có tên là Microsoft.SQLSERVER.CE.4.0 , Đến lượt nó, SQL Server Compact Edition 4.0 có sự phụ thuộc vào một hội đồng có tên là Microsoft.VC90.CRT . May mắn thay, bản cài đặt SQLCE của bạn đi kèm với một bản sao của lắp ráp này:

📁Microsoft.VC90.CRT
├──📄Microsoft.VC90.CRT.manifest 
╰──📄msvcr90.dll

Điều này có nghĩa là cấu trúc thư mục cuối cùng là:

📁C:\
╰──📁Users
   ╰──📁Ian
      ╰──📁AppData
         ╰──📁Local
            ╰──📁Hyperion Pro
               ├──📄Hyperion.exe
               ├──📄Hyperion.exe.manifest
               ╰──📁Microsoft.SQLSERVER.CE.4.0
                  ├──📄Microsoft.SQLSERVER.CE.4.0.manifest
                  ├──📄sqlceme40.dll
                  ├──📄sqlceca40.dll
                  ├──📄sqlceoledb40.dll
                  ├──📄sqlcese40.dll
                  ├──📄sqlceqp40.dll
                  ├──📄sqlcecompact40.dll
                  ├──📄sqlceer40en.dll
                  ╰──📁Microsoft.VC90.CRT
                     ├──📄Microsoft.VC90.CRT.manifest
                     ╰──📄msvcr90.dll
               


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách bật tính năng nén trên bảng hiện có trong SQL Server (T-SQL)

  2. Tìm gói SSIS ngày triển khai / sửa đổi lần cuối - SQL Server

  3. Cải thiện hiệu suất truy vấn SQL Server trên các bảng lớn

  4. Làm cách nào để tạo ràng buộc kiểm tra nhiều bảng?

  5. Cột xung đột với loại cột khác trong danh sách bỏ chia