Ich muss etwas Code aus dem alten Projekt in das neue verschieben. Altes Projekt verwendet DLL mit gespeicherten Prozeduren (32-Bit-Version), aber ich brauche diese DLL bei 64-Bit SQL Server, also muss ich diese Prozeduren neu schreiben."MS DTC hat die verteilte Transaktion abgebrochen" Fehler in SQLCLR gespeicherte Prozedur
ich mit Stored Procedures schreibe DLL für SQL Server 2008 Management Studio I Assembly laden, dann Prozedur erstellen, indem Sie:
CREATE PROCEDURE ...
AS EXTERNAL NAME
Alte DLL Prozeduren nur neue Verbindung zum Remote-SQL-Server verwendet gespeichert laufen Verfahren darauf und Ergebnisse zurückgeben.
Also in meiner Prozedur ich ein SqlConnection
auf den Remote-Server erstellen und gespeicherte Prozedur auf dem Remote-Server ausgeführt werden:
using (SqlConnection connection = new SqlConnection(String.Format("User ID={0};Password={1};Persist Security Info=True;Initial Catalog={2};Data Source={3}", Login, Password, DBName, ServerName)))
{
connection.Open();
SqlCommand command = new SqlCommand("Exec ProcName", connection);
SqlDataReader reader = command.ExecuteReader();
SqlContext.Pipe.Send(reader);
}
Wenn ich dieses Verfahren in SSMS ausführen, funktioniert es. Aber im alten Projekt wirft es Fehler:
MSDTC-Dienst läuft, und ich setze alle Sicherheitsparameter. Wie behebt man das? Vielleicht gibt es andere Möglichkeiten, entfernte gespeicherte Prozeduren auszuführen (Verbindungsserver), aber ich muss alte Projektfunktionen speichern.
DTC ist an * Transaktionen beteiligt * Veröffentlichen Sie den Code, der * die Transaktion * startet. Ihre gespeicherte Prozedur tut etwas wirklich Böses - sie öffnet einen * neuen Verbindungsserver *, was bedeutet, dass alle bestehenden Transaktionen, die von Ihrem Code gestartet werden, zu verteilten Transaktionen eskalieren müssen, die DTC verwenden. Warum haben Sie nicht einfach einen Verbindungsserver erstellt und die Remote-Prozedur direkt aufgerufen? Um diesen Code auszuführen, musste man sich auch entspannen SQLCLR Sicherheit –