2012-11-05 24 views
2

我想要從if語句中的數據庫調用中獲取數據,然後我希望能夠在頁面後面的if語句之外使用該數據。C# - 我怎樣才能聲明一個變量,將得到填充數據庫調用內部的if語句?

那麼,爲什麼不工作?我能做些什麼來完成這項工作?我剛剛收到錯誤消息「編譯器錯誤消息:CS0103:名稱'selectedData'在當前上下文中不存在」。我試圖在if語句之外聲明一個「selectedData」變量,以便它可用,但我似乎無法弄清楚如何正確執行該操作。

@{ 

    var testVariable = "blah"; 

    //set cache key and query based their being a craft name 
    if(testVariable.Length > 0){ 

     var db = Database.Open("Connection"); 
     var selectedData = db.Query("SELECT * FROM Products");    
    } 

} 


<div> 
    @foreach (var row in selectedData){ 
     @row.ContentTitle <br /> 
     @row.ContentShortDescription <br /> 
    } 
</div> 

回答

2

這是一個範圍問題。你需要在if範圍之外聲明你的變量。

@{ 

    var testVariable = "blah"; 
    Type selectedData; 

    //set cache key and query based their being a craft name 
    if(testVariable.Length > 0){ 

     var db = Database.Open("Connection"); 
     selectedData = db.Query("SELECT * FROM Products");    
    } 

} 


<div> 
    @foreach (var row in selectedData){ 
     @row.ContentTitle <br /> 
     @row.ContentShortDescription <br /> 
    } 
</div> 

我不熟悉這裏的類型,所以我用Type。在那裏替換適當的類型。請注意,該代碼片段在進入循環之前也不能確保selectedData被正確設置。你也應該處理。

+0

我想這確實是我的問題所在。我試着添加var selectedDate =「」;在那裏你添加了行,但然後我得到以下錯誤「編譯器錯誤消息:CS0029:不能隱式地將類型'System.Collections.Generic.IEnumerable '轉換爲'string'」。所以我想我不能使用「var」作爲類型,但是它會是什麼類型? – user1801249

+0

那麼這是我在帖子中提到的..使用db.Query返回的類型。我不知道那是什麼。看看文檔。 –

+0

嘗試用'IEnumerable selectedData = null;'。 – GmG

0

這是一個關於範圍的問題。

基本上,在C#中,當您打開一組新的{}時,您聲明瞭一個新的作用域。在該範圍內創建變量,退出時會被銷燬。這是一個相當簡單的解釋,不完全準確,但它很容易理解。

{ 
    var testVariable = "blah"; 

    //set cache key and query based their being a craft name 
    if(testVariable.Length > 0) 
    { 

     var db = Database.Open("Connection"); 
     // Create a new variable. 
     var selectedData = db.Query("SELECT * FROM Products");   
    } 
    // Variable doesn't exist anymore. 
} 

要解決這個問題:

{ 
    var testVariable = "blah"; 
    // Create variable outside the if scope 
    var selectedData = null; // Won't compile, compiler cannot find valid variable type. 

    //set cache key and query based their being a craft name 
    if(testVariable.Length > 0) 
    { 

     var db = Database.Open("Connection"); 
     // Assign a value to a variable 
     selectedData = db.Query("SELECT * FROM Products");   
    } 
    // Variable still exist! 
} 
// Here, variable would cease to exist. :(

但在這裏,代碼將無法編譯,因爲編譯不知道是什麼類型selectedData,因爲我在其創建爲它分配null。所以,讓我們說selectedDataData類型:

{ 
    var testVariable = "blah"; 
    // Create variable outside the if scope 
    Data selectedData = null; // Now it compiles. :) 

    //set cache key and query based their being a craft name 
    if(testVariable.Length > 0) 
    { 

     var db = Database.Open("Connection"); 
     // Assign a value to a variable 
     selectedData = db.Query("SELECT * FROM Products");   
    } 
    // Variable still exist! 
} 
// Here, variable would cease to exist. :(

之後,你可以做if (selectedData != null)知道,如果數據被正確查詢。

+1

您應該注意,這實際上不會編譯。 –

+0

@JordanKaye:最有可能的。我仍然很難理解爲什麼人們在各處發送'var'。它只是更難跟蹤變量類型。 – LightStriker

+0

這將是錯誤CS0818 - 「隱式類型局部變量必須初始化」 –

相關問題