“列”不属于表

时间:2014-02-17 18:30:13

标签: c# database

以下是此方法的代码。我想处理我正在使用的数据库中的Active列,但是我得到“Active”不属于表的错误。它显然在表中,我在RestartData.cs中定义了它的属性。在数据库中,我将它设置为一点而不是布尔值。我想知道这可能是问题所在。 1表示True,0表示False。我通过谷歌研究了这个问题,但实际上并没有找到任何重点。任何帮助将不胜感激。

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;
        }

2 个答案:

答案 0 :(得分: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 :(得分:1)

这是因为您没有从查询中选择active列。

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

上面的查询变成了一个数据表,其中包含您使用select语句选择的列。

现在您正在使用此数据表并尝试访问active中甚至不存在的datatable列。

所以这个陈述会导致错误

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

因此,您需要使用选择查询选择active列。

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

但除此之外,我会说你为什么要访问active col的值 此

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

即使您知道此值始终为1

最好像这样使用它

restartData.Active = true;