使用 C# 执行 SQLCommand 时出错

Posted

技术标签:

【中文标题】使用 C# 执行 SQLCommand 时出错【英文标题】:Error when executing SQLCommand using C# 【发布时间】:2011-09-27 08:46:16 【问题描述】:

我对使用 C# (Visual Studio 2010) 的 ADO.NET 还是很陌生。使用 LinqToSql 不是一个选项,因为底层数据库是 Compact Edition 3.5(不幸的是)。

下面显示的代码出现错误:“解析查询时出错。[Token line number = 2,Token line offset = 38,Token in error = 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();

【问题讨论】:

您是否尝试在没有列别名的情况下执行查询,或者您是否尝试将别名更改为 'col1'、'col2'、...? Linq to SQL 与 SQL Server Compact 3.5 一起使用(从命令行使用 sqlmetal.exe) 【参考方案1】:

我认为您需要去掉“AgentName”周围的引号。

【讨论】:

【参考方案2】:

将单引号''改为括号[]

a.name 为 [AgentName],

【讨论】:

以上是关于使用 C# 执行 SQLCommand 时出错的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C# 中使用 SqlCommand 读取每一行和值?

如何使用 SqlCommand 和 DataAdapter 以使用 C# 操作 SQL Server

从 C# 通过 OLEDB 执行更新时出错

C#操作SQL Server数据库

sql server C#操作。原文在收藏页面

使用C#执行SSIS包时出错