Ich kommentiere dies, weil dies eines der Top-Ergebnisse bei einer Google-Suche für das Hinzufügen von SQL Server-Konnektivität zu einer Cocoa (MacOS) Anwendung ist, aber ich sehe keine aktuellen Lösungen aufgelistet.
FreeTDS - wie Daniel vorgeschlagen hat, ist der schnellste/einfachste Weg, aber es gibt einige Informationen darüber, wie man das ohne die gefürchtete Java-Bridge oder einen Python-Hack hinbekommt. Erstellen Sie FreeTDS mit Homebrew (versuchen Sie um Himmels willen nicht, es selbst auf dem Mac zu erstellen), wählen Sie dann Ihr Projekt im Xcode-Finder aus, wählen Sie die Registerkarte "Build-Phasen", und verknüpfen Sie dann unter "Binärdateien mit Bibliotheken verknüpfen" die FreeTDS-Bibliothek libsybdb (entweder die dynamische oder die statische). Klicken Sie auf das "+"-Zeichen, wählen Sie dann "andere hinzufügen" und navigieren Sie zu dem Verzeichnis, in dem sich die Bibliotheken befinden - bei mir war das Verzeichnis, in dem die Bibliotheken installiert waren
/usr/local/Cellar/freetds/1.00.109/lib
dann wählen Sie (z. B.) libsybdb.a in diesem Verzeichnis
Sie können dann die FreeTDS-API verwenden oder einen Wrapper wie dieses von Martin Rybak was ich auch getan habe (ich verwende eine alte Version dieses "SQLClient"-Codes). Es funktioniert ziemlich einfach für eine SQL Server-Instanz auf AWS und vorhersehbar etwas komplizierter für eine Azure AWS-Instanz - ich musste den Wrapper hacken, da der Wrapper-Code einen "use db"-Befehl an Azure nach der Anmeldung ausgibt, den Azure nicht akzeptiert - für Azure muss die Datenbank während der Verbindung festgelegt werden - stattdessen fügte ich (mit dem neueren Code von GitHub):
DBSETLDBNAME(_login, [host UTF8String]);
in der Datei SQLClient.m, die ich dem Abschnitt hinzugefügt habe:
DBSETLUSER(_login, [username UTF8String]);
DBSETLPWD(_login, _password);
DBSETLHOST(_login, [host UTF8String]);
DBSETLCHARSET(_login, [self.charset UTF8String]);
und ich habe es kommentiert:
if (database) {
_returnCode = dbuse(_connection, [database UTF8String]);
if (_returnCode == FAIL) {
[self connectionFailure:completion];
return;
}
}
Meine App ist Swift-basiert, also verwende ich einen Bridging Header, der dazugehört:
#import SQLClient.h
Um die Lib zu verwenden, etwas wie (Pseudocode, da ich nicht vor meinem Code gerade jetzt):
let client = SQLClient.sharedInstance()
//I'm using the older code which uses a delegate and not notifications callback
self.client!.delegate = self
self.client!.connect("database_network_address", username: "username", password: "password", database: "database_name", completion: { (success) -> Void in
if(success) {
print ("connection has succeeded")
// now do something with the connection
self.client!.execute("select * from table_name", completion: { (data) -> Void in
//... do something with the returned array "data" per the wrapper API
})
} else {
print ("connection has NOT been success")
}
})
Lassen Sie es mich wissen, wenn Sie irgendwelche Fragen dazu haben. Dies funktioniert absolut für eine Cocoa-App, ich verwende meine App, um Tonnen von Daten in eine Azure SQL Server-Instanz hochzuladen. Viel Glück!