2016-06-16 4 views
-1

Ich habe den folgenden Code ausgeführt werden, und ich möchte den Wert von @ Synchronization_Version von C# erhalten. Weiß jemand, wie das gehandhabt werden könnte?Wie erhält man den Wert einer Variablen in TSQL aus dem C# -Code?

DECLARE @synchronization_version BIGINT 
SET @synchronization_version = CHANGE_TRACKING_CURRENT_VERSION(); 
+0

Verwenden Sie eine skalare Funktion? – Ghost

+0

danke für den Kommentar! – Lubor

Antwort

1

Der direkteste Weg ist die Verwendung von SqlCommand.ExecuteScalar. Siehe diesen Artikel: https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.executescalar(v=vs.110).aspx.

Ihre SQL-Abfrage würde wie folgt aussehen:

SELECT Convert(BigInt,CHANGE_TRACKING_CURRENT_VERSION()); 

ich die MSDN Code wie folgt modifiziert. Dies sollte funktionieren:

public static Int64 GetSynchronizationVersion(string connString) 
{ 
    Int64 synchronizationVersion = 0; 
    string sql = 
     "SELECT Convert(BigInt,CHANGE_TRACKING_CURRENT_VERSION());"; 
    using (SqlConnection conn = new SqlConnection(connString)) 
    { 
     SqlCommand cmd = new SqlCommand(sql, conn); 
     //This query has no parameters. 
     try 
     { 
      conn.Open(); 
      synchronizationVersion = (Int64)cmd.ExecuteScalar(); 
     } 
     catch (Exception ex) 
     { 
      Console.WriteLine(ex.Message); 
     } 
    } 
    return synchronizationVersion; 
} 

Dieser Vorgang ExecuteScalar genannt wird, weil sie einen einzelnen Wert (Skalar), anstatt eine Reihe von Zeilen zurückgibt.

+0

DANKE SEHR VIEL! das kann funktionieren! – Lubor

+0

Sie sind herzlich willkommen. –

0

es wie

create procedure Sp_getdata 
as 
begin 
DECLARE @synchronization_version BIGINT OUTPUT 
SET @synchronization_version = CHANGE_TRACKING_CURRENT_VERSION(); 
SELECT @synchronization_version; 
end 

Anruf in einem Verfahren Wickeln Sie das Verfahren von C#

SqlParameter outData = new SqlParameter("@synchronization_version", SqlDbType.BIGINT){ Direction = ParameterDirection.Output }; 

cmd.ExecuteScalar(); 

den Wert des Ausgangsparameters Lesen Sie dann nur

long result = outData.Value; 
Verwandte Themen