2012-01-17 73 views
2

我在公共-v-私有變量和作用域中遇到了一點問題。c#在方法中使用的變量的上下文錯誤

這裏是我的代碼

private void PopulateCaseViewer(string paramField, string paramValue) 
    { 
     string strConnection = BuildConnectionString(); 
     SqlConnection linkToDB = new SqlConnection(strConnection); 

     if (paramField == "load") 
     { 
      string sqlStat = "SELECT c.CaseNo, c.Claimant, c.Defendant, c.DOA, c.CaseType, c.CaseManager, c.Occupation, c.DateInstruction " + 
          "a.IPName, a.IPRegion, l.IPReference " + 
          "FROM tblCases AS c INNER JOIN tblIPLinks as l ON c.CaseNo = l.CaseNo " + 
          "JOIN tblIPAddresses AS a ON l.IPID = a.IPID;"; 
     } 
     using (linkToDB) 
     using (var adapter = new SqlDataAdapter(sqlStat, linkToDB)) 
     { 
      var table = new DataTable(); 
      adapter.Fill(table); 
      dataCaseViewer.DataSource = table; 
     } 
    } 

的問題是,在該行字符串sqlStat「使用(VAR適配器=新SqlDataAdapter的......)」指出,sqlStat是「不在當前存在語境」。

我的目標是根據傳遞給它的paramField和paramValues在這個方法上添加很多IF語句,以便構建不同的sqlStats來填充依賴於用戶輸入的dataCaseViewer.DataSource。但是如果IF語句中的sqlStat變量不能被SqlDataAdapter中的後續調用看到,那麼我有點卡住了。

任何建議請。

回答

2

這是因爲您在上面的IF語句內定義了sqlStat,並且僅在該語句中才有效。

在IF上面定義sqlStat,在IF中設置它,它應該工作得很好。

string sqlStat = System.String.Empty; 

if (paramField == "load") 
{ 
    sqlStat = "SELECT..."; 
1

那麼這樣說 - 你有什麼要被用來代替如果paramField分配在if語句中的值不是「負荷」?你期望構建什麼SQL語句?

你可能只是需要申報paramFieldif聲明外,並確保採取什麼路徑,一個適當的值將被使用前分配給它。

1
string sqlStat;  
    if (paramField == "load") 
    { 
     sqlStat = "SELECT c.CaseNo, c.Claimant, c.Defendant, c.DOA, c.CaseType, c.CaseManager, c.Occupation, c.DateInstruction " + 
         "a.IPName, a.IPRegion, l.IPReference " + 
         "FROM tblCases AS c INNER JOIN tblIPLinks as l ON c.CaseNo = l.CaseNo " + 
         "JOIN tblIPAddresses AS a ON l.IPID = a.IPID;"; 
    } 
    using (linkToDB) 
    using (var adapter = new SqlDataAdapter(sqlStat, linkToDB)) 
    { 
     ... 

應該工作。

1
private void PopulateCaseViewer(string paramField, string paramValue) 
    { 
     string strConnection = BuildConnectionString(); 
     SqlConnection linkToDB = new SqlConnection(strConnection); 

     if (paramField == "load") 
     { 
      string sqlStat = "SELECT c.CaseNo, c.Claimant, c.Defendant, c.DOA, c.CaseType, c.CaseManager, c.Occupation, c.DateInstruction " + 
          "a.IPName, a.IPRegion, l.IPReference " + 
          "FROM tblCases AS c INNER JOIN tblIPLinks as l ON c.CaseNo = l.CaseNo " + 
          "JOIN tblIPAddresses AS a ON l.IPID = a.IPID;"; 

      using (linkToDB) 
      using (var adapter = new SqlDataAdapter(sqlStat, linkToDB)) 
      { 
      var table = new DataTable(); 
      adapter.Fill(table); 
      dataCaseViewer.DataSource = table; 
      } 
     } 
    } 

的slqStat是IF內定義的..所以你需要裏面的一切,如果使用

+0

我不想在IF內部的一切,否則我必須重複sqlDataAdapter代碼爲每個IF語句,將在這種方法,並且可能會有一些。 – PJW 2012-01-17 16:12:50

+0

你可以初始化變量。我想這個解決方案比沒有任何工作更好。 – 2012-01-17 16:38:24

1

您指定的字符串中的if語句中,並嘗試使用它在它之外。

0

不是上下文問題,只是邏輯的失敗。

如果paramfield =「load」,則只聲明sqlstat,如果不是。它沒有聲明,所以你不能使用它....

在if裏面使用它或者在外面聲明它,如果你做了後者,你需要將它設置爲別的東西。

string sqlStat = String.Empty; 
if (paramfield = "load") 
{ 
sqlstat = "..."; 
} 
else 
{ 
//? 
} 
using... 
+0

如果我在IF語句之前聲明,我如何在IF語句中設置它。很抱歉,如果這是非常基本的。 – PJW 2012-01-17 16:11:41

相關問題