2011-08-30 64 views
1

我正在调用C#代码中的SQL查询。 如何保持我已经在SQL中声明的变量的声明? 这是我的代码:记住sql中变量的声明

SqlConnection connection = new SqlConnection(conString); 
    connection.Open(); 
    string s = @" 
       declare @ttt int 
       set @ttt = 6 
       select @ttt"; 
    SqlCommand cmd = new SqlCommand(s, connection); 
    int retVal = (int)cmd.ExecuteScalar(); 

    s = @"select @ttt"; 
    cmd.CommandText = s; 
    retVal = (int)cmd.ExecuteScalar(); 

    connection.Close(); 

误差,在第二的ExecuteScalar()是:必须声明标量变量 “@ttt”。 (因为我做的计算等在我的C#代码,我必须将它拆分成多个查询。 的问题是从C#代码连接和SQL查询的范围。

+0

正如前面的答案所指出的,你的SQL变量超出了命令之间的范围。然而,更侧面的方法是将数据存储在持续**连接**的[本地临时表](http://www.programmers-corner.com/article/76)中。 –

回答

1

变量是“批量”作用域。每个命令执行相当于(至少)一个批处理,因此第一批中声明的变量都不会在第二批中显示。

解决此问题的唯一方法是将两个SQL块一起组合单批或重新声明,并在所有批次分配变量。

有关更多信息,请参阅documentation

1

变量只在当前命令的范围内。

如果你在你的第一个查询,然后也许在你的第二个查询返回@ttt的价值,你可以再次声明变量,然后设置变量这是第一个查询返回的值。

0

从第一命令是@ttt然后将在retVal的值。为什么当你已经有了价值时你需要做另一个查询?

+0

这是一个例子。 – hill

+0

这是一个例子。这可能意味着很多用途,通过在c#代码中计算并继续sql查询。谢谢。 – hill