2011-09-27 77 views
1

我對使用C#(Visual Studio 2010)的ADO.NET很陌生。使用LinqToSql不是一種選擇,因爲底層數據庫是Compact Edition 3.5(不幸)。)使用C#執行SQLCommand時出錯(

與我下面所顯示的代碼得到一個錯誤:「有一個錯誤解析查詢[令牌行號= 2,令牌行偏移= 38,令牌錯誤= AGENTNAME。」

誰能告訴我,我在做什麼錯了?

using (SqlCeConnection oConn = new SqlCeConnection(connectionstring)) 
     { 
      string strSql = @"select 
         a.name as 'AgentName', 
         t.description as 'JobType', 
         s.description as 'Status', 
         count(j.statusid) as 'Count' 
        from 
         jobs as j 
          inner join agents as a on j.agentid = a.id 
          inner join statusdictionary as s on j.statusid = s.id 
          inner join jobtypedictionary as t on j.jobtypeid = t.id 
        where 
         convert(datetime,starttime,0) between @FirstDate and @LastDate 
         AND j.JobTypeID = @JobTypeID AND j.AgentID = @AgentID 
        group by 
         s.description, 
         t.description, 
         a.name order by a.name,  
         t.description"; 
      SqlCeCommand oCmd = new SqlCeCommand(strSql, oConn); 

      SqlCeParameter fdparam = new SqlCeParameter(); 
      fdparam.ParameterName = "@FirstDate"; 
      fdparam.Value = firstdate; 
      oCmd.Parameters.Add(fdparam); 

      SqlCeParameter ldparam = new SqlCeParameter(); 
      ldparam.ParameterName = "@LastDate"; 
      ldparam.Value = lastdate ; 
      oCmd.Parameters.Add(ldparam); 

      SqlCeParameter JIDparam = new SqlCeParameter(); 
      JIDparam.ParameterName = "@JobTypeID"; 
      JIDparam.Value = jobtypeid; 
      oCmd.Parameters.Add(JIDparam); 

      SqlCeParameter AIDparam = new SqlCeParameter(); 
      AIDparam.ParameterName = "@AgentID"; 
      AIDparam.Value = jobtypeid; 
      oCmd.Parameters.Add(AIDparam); 

      oConn.Open(); 
      SqlCeDataReader oReader = oCmd.ExecuteReader(); 
+0

你嘗試不列別名來執行查詢或你嘗試改變別名「COL1」,「COL2」,......? –

+0

Linq to SQL適用於SQL Server Compact 3.5(使用命令行中的sqlmetal.exe) – ErikEJ

回答

4

我認爲你需要丟掉'AgentName'周圍的引號。

1

更改單引號「」以括號[]

a.name as [AgentName],