login à un server SQL à l'aide d'ADODB à partir d'une DLL C #

J'écris une class de Connection personnalisée en C # pour Excel pour être en mesure de se connecter à un server SQL. Lorsque j'utilise SQLConnection partir de la bibliothèque System.Data.SqlClient , je suis en mesure d'établir une connection. Le code de travail que j'ai:

 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Data.SqlClient; using System.Runtime.InteropServices; namespace Test { [InterfaceType(ComInterfaceType.InterfaceIsDual), Guid("6E8B9F68-FB6C-422F-9619-3BA6D5C24E84")] public interface IConnection { bool Status { get; } bool Open(); } [ClassInterface(ClassInterfaceType.None)] [Guid("B280EAA4-CE11-43AD-BACD-723783BB3CF2")] [ProgId("Test.Connection")] public class Connection : IConnection { private bool status; private SqlConnection conn; private ssortingng connSsortingng = "Data Source=[server]; Initial Catalog=[initial]; User ID=[username]; Password=[password]"; public Connection() { } public bool Status { get { return status; } } public bool Open() { try { conn = new SqlConnection(connSsortingng); conn.Open(); status = true; return true; } catch(Exception e) { e.ToSsortingng(); return false; } } } } 

Et après avoir ajouté la reference à Excel, je suis en mesure de tester la connection en utilisant un simple code VBA comme ceci:

 Sub TestConnection() Dim conn As Test.Connection Set conn = New Test.Connection Debug.Print conn.Status conn.Open Debug.Print conn.Status End Sub 

Il produit:

Faux
Vrai

Alors tout va bien. Maintenant, je voudrais créer une class Recordset personnalisée dans ma bibliothèque C # donc j'ai décidé d'utiliser une bibliothèque RecordSet et son RecordSet au lieu de SqlDataReader comme je SqlDataReader de travailler avec de gros morceaux de données. J'ai donc modifié mon code pour ceci:

 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Data.SqlClient; using System.Runtime.InteropServices; namespace Test { [InterfaceType(ComInterfaceType.InterfaceIsDual), Guid("6E8B9F68-FB6C-422F-9619-3BA6D5C24E84")] public interface IConnection { bool Status { get; } bool Open(); } [ClassInterface(ClassInterfaceType.None)] [Guid("B280EAA4-CE11-43AD-BACD-723783BB3CF2")] [ProgId("Test.Connection")] public class Connection : IConnection { private bool status; private ADODB.Connection conn = new ADODB.Connection(); private ssortingng connSsortingng = "Data Source=[server]; Initial Catalog=[initial]; User ID=[username]; Password=[password]"; public Connection() { } public bool Status { get { return status; } } public bool Open() { try { conn.ConnectionSsortingng = connSsortingng; conn.Open(); // conn.Open(connSsortingng, ["username"], ["password"], 0) // what else can I try? is this where it actually fails? status = true; return true; } catch (Exception e) { e.ToSsortingng(); return false; } } } } 

J'ai également ajouté des references à Microsoft ActiveX Data Objects 6.1 Library .

Maintenant, lorsque j'exécute le code VBA, il affiche:

0
0

Mais je m'attendais à 0 et 1 . Il me semble que je ne me connecte pas correctement au server (les informations d'identification sont les mêmes que je viens de supprimer datatables réelles de ce code) .

J'ai essayé d'utiliser différentes variantes de la string de connection, mais elle renvoie toujours 0 et 0 . J'ai essayé de créer un nouveau projet avec de nouveaux GUID et j'ai essayé de renommer les projets, les classs, etc. rien n'a fonctionné. Je suspecte son établissement de la connection mais je ne sais pas comment déboguer une DLL.

J'ai utilisé link1 , link2 , link3 , link4 comme reference

Mettre à jour:
J'ai écrit l'exception au file comme suggéré par TheKingDave. Ceci est le message d'erreur d'exception

System.Runtime.InteropServices.COMException (0x80004005): [Microsoft] [Gestionnaire de pilotes ODBC] Nom de la source de données introuvable et aucun pilote par défaut spécifié à ADODB._Connection.Open (Chaîne ConnectionSsortingng, ID user string, Mot de passe string, Options Int32) à TestADODB .Connection.Open () dans c: \ Users \ administrateur \ Documents \ Visual Studio 2012 \ Projects \ Test \ Test \ Connection.cs: ligne 49

La string de connection est manquante Provider=SQLOLEDB .

ADODB.Connection doit connaître le type de database auquel il se connecte.