2010-10-25 21 views
0

J'essaie de compiler la solution Xsd2Db dans le framework .NET 4.0. Ajouter une référence à « Microsoft ADO Ext 6.0 pour DDL et sécurité. » Et l'utiliser de cette manière -application .NET 4.0 pour utiliser Microsoft ADO Ext. 6.0 pour DDL et sécurité

using System; 
using System.IO; 
using ADOX; 

namespace Xsd2Db.Data 
{ 
/// <summary> 
/// Summary description for JetDataSchemaAdapter. 
/// </summary> 
public sealed class JetDataSchemaAdapter : AdoxDataSchemaAdapter 
{ 
    /// <summary> 
    /// 
    /// </summary> 
    internal const string Extension = ".mdb"; 

    /// <summary> 
    /// 
    /// </summary> 
    /// <param name="name"></param> 
    /// <returns></returns> 
    internal static string GetPath(string name) 
    { 
    return Path.GetFullPath(
    Path.ChangeExtension(name, Extension)); 
    } 

    /// <summary> 
    /// 
    /// </summary> 
    /// <param name="name"></param> 
    /// <returns></returns> 
    internal static string GetConnectionString(string name) 
    { 
    return String.Format(
    "Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Jet OLEDB:Engine Type=5;", 
    GetPath(name)); 
    } 

    /// <summary> 
    /// 
    /// </summary> 
    /// <param name="name"></param> 
    protected override void DeleteCatalog(string name) 
    { 
    File.Delete(GetPath(name)); 
    } 

    /// <summary> 
    /// 
    /// </summary> 
    /// <param name="name"></param> 
    protected override void CreateCatalog(string name) 
    { 
    // Force the run-time to let go of the file! Otherwise, 
    // cleanup and other operations might fail because the file 
    // will still be in use. 

      Catalog catalog = new CatalogClass(); 
    catalog.Create(GetConnectionString(name)); 
    catalog.ActiveConnection = null; 
    catalog = null; 
    GC.Collect(); 
    } 

    /// <summary> 
    /// 
    /// </summary> 
    /// <param name="name"></param> 
    /// <returns></returns> 
    protected override Catalog OpenCatalog(string name) 
    { 
    Catalog catalog = new CatalogClass(); 
    catalog.let_ActiveConnection(GetConnectionString(name)); 
    return catalog; 
    } 
} 
} 

Maintenant, j'ai une erreur lors de la compilation - « Le type « ADOX.CatalogClass » n'a pas les constructeurs défini ".

En cliquant sur le lien d'erreur me amène aux données méta -

#region Assembly Interop.ADOX.dll, v4.0.30319 
// C:\xsd\xsd2db\xsd2db\Common\DataSchemaAdapter\obj\Debug\Interop.ADOX.dll 
#endregion 

using System; 
using System.Reflection; 
using System.Runtime.InteropServices; 

namespace ADOX { 
    [Guid("00000602-0000-0010-8000-00AA006D2EA4")] 
    [ClassInterface(0)] 
    [TypeLibType(2)] 
    public class CatalogClass : _Catalog, Catalog { 
     public CatalogClass(); 

     [DispId(1)] 
     public virtual dynamic ActiveConnection { get; set; } 
     [DispId(4)] 
     public virtual Groups Groups { get; } 
     [DispId(2)] 
     public virtual Procedures Procedures { get; } 
     [DispId(0)] 
     public virtual Tables Tables { get; } 
     [DispId(5)] 
     public virtual Users Users { get; } 
     [DispId(3)] 
     public virtual Views Views { get; } 

     [DispId(6)] 
     public virtual dynamic Create(string ConnectString); 
     [DispId(7)] 
     public virtual string GetObjectOwner(string ObjectName, ObjectTypeEnum ObjectType, object ObjectTypeId = Type.Missing); 
     [DispId(1)] 
     public virtual void let_ActiveConnection(object pVal); 
     [DispId(8)] 
     public virtual void SetObjectOwner(string ObjectName, ObjectTypeEnum ObjectType, string UserName, object ObjectTypeId = Type.Missing); 
    } 
} 

Nous pouvons voir CatalogClass publiques(); mais pas un constructeur.

Je crois en .NET 1.x cela a fonctionné. Mais pourquoi .NET 4.0 a ce problème? Quelqu'un a trouvé cela et Quelle est la meilleure façon de gérer cela?

Merci!

Répondre