2016-06-16 47 views
-1

我有以下代码被执行,我想从c#中获取@synchronization_version的值。有没有人知道如何处理?如何从C#代码中获取TSQL中的变量值?

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

使用标量函数的值? – Ghost

+0

感谢您的评论! – Lubor

回答

1

最直接的方法是使用SqlCommand.ExecuteScalar。看到这篇文章:https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.executescalar(v=vs.110).aspx

你的SQL查询应该是这样的:

SELECT Convert(BigInt,CHANGE_TRACKING_CURRENT_VERSION()); 

我修改了MSDN代码如下。这应该工作:

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; 
} 

这种操作称为的ExecuteScalar因为它返回一个值(标量),而不是一组行。

+0

非常感谢!这可以工作! – Lubor

+0

非常欢迎。 –

0

把它包在从C#

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

cmd.ExecuteScalar(); 

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

调用过程的过程然后,只需读取输出参数

long result = outData.Value; 
相关问题