使用 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 读取每一行和值?