2011-08-30 66 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