2014-02-17 52 views
0

下面是我對這種方法的代碼。我想處理我正在使用的數據庫中的Active列,但是我得到這個「Active」不屬於表的錯誤。這顯然在表中,並且我在RestartData.cs中用屬性定義了它。在數據庫中,我將它設置爲一點而不是布爾值。我想知道這是否是問題所在。 1爲真,0爲假。我通過谷歌研究了這一點,但無法找到任何關鍵點。任何幫助將不勝感激。「Column」不屬於表

static List<RestartData> AppRestartList() 
     { 
      List<RestartData> restartDatas = new List<RestartData>(); 

      RestartData restartData = null; 

      string sqlQuery = "Select RestartTime, ProgramLocation, LastRestartTime, RestartInterval, ProgramServer, RestartIfRunning, ProcessName from dbo.anyDatabase where active=1;"; 

      //execute sql query 
      //execute database reader 
      SqlCommand command = new SqlCommand(sqlQuery, (SqlConnection)DB.MakeConnection("any_database")); 
      DataTable dt; 

      command.Connection.Open(); 

      dt = DB.ExecuteTable(command, "any_database"); 

      foreach (DataRow row in dt.Rows) 
      { 
       //move stuff from reader into log data, and exp 
       //not RestartData restartData = new RestartData(); The RestartData() method is already declared 
       restartData = new RestartData(); 
       restartData.ProgramLocation = Misc.NullSafeString(row["programLocation"]); 
       restartData.Active = Misc.NullSafeBool(row["active"]); 
       restartData.RestarInterval = Misc.NullSafeInt(row["restartInterval"]); 
       restartData.RestartIfRunning = Misc.NullSafeBool(row["restartIfRunning"]); 
       restartData.ProcessName = Misc.NullSafeString(row["processName"]); 
       restartData.LastRestartTime = Misc.NullSafeDateTime(row["lastRestartTime"]); 

       //add restartData to list 
       restartDatas.Add(restartData); 

      } 
      return restartDatas; 
     } 
+0

問題標題沒有意義。 – M4N

+0

我之所以這麼用,是因爲Google中的任何內容都不會在NullSafeBool上進行搜索而返回,因此我爲可能正在查找的下一個人做了 – webby68

+0

但問題與NullSafeBool()方法無關 – M4N

回答

1

這是因爲您沒有從您的查詢中選擇active列。

string sqlQuery = "Select RestartTime, ProgramLocation, LastRestartTime, RestartInterval, ProgramServer, RestartIfRunning, ProcessName from dbo.anyDatabase where active=1;"; 

上面的查詢變成其中將包含您使用select語句選擇列的DataTable。

現在您正在使用該數據表並嘗試訪問active列,該列甚至不存在於該datatable中。

所以這個聲明會導致錯誤

restartData.Active = Misc.NullSafeBool(row["active"]); 

因此,你需要用你的SELECT查詢選擇active列。

string sqlQuery = "Select Active, RestartTime, ProgramLocation, LastRestartTime, RestartInterval, ProgramServer, RestartIfRunning, ProcessName from dbo.anyDatabase where active=1;"; 

但是除了這個,我會說,你爲什麼要訪問active山坳的價值像 這

restartData.Active = Misc.NullSafeBool(row["active"]); 

即使你知道這值將始終是1

所以最好像這樣使用它

restartData.Active = true; 
+0

好的,這很簡單,但最初我在select語句中有它,但並不認爲我需要它,因爲我在那裏使用它。這個改變返回Active「True」,謝謝 – webby68

2

我覺得你的實際選擇

Select RestartTime, 
      ProgramLocation, 
      LastRestartTime, 
      RestartInterval, 
      ProgramServer, 
      RestartIfRunning, 
      ProcessName 
from  dbo.anyDatabase 
where  active=1 

是罰款。

請注意,active是不是在選擇列表中,雖然,但你在

restartData.Active = Misc.NullSafeBool(row["active"]); 

引用它要麼改變SELECT以包括active列或刪除行,你引用它。

+1

我同意並建議使用後面的建議(刪除引用)。由於'SELECT'總是返回'active = 1'的行,所以你可以正確設置' restartData.Active'字段爲'true'。 –

相關問題