【问题标题】:"Error parsing the query" while getting @@Identity from SQL Server CE从 SQL Server CE 获取 @@Identity 时出现“解析查询时出错”
【发布时间】:2014-02-02 18:17:22
【问题描述】:

我正在编写一个使用本地 SQL 数据库 (SQL Server CE) 的简单桌面应用程序。这是有问题的部分:

SqlCeConnection conn = new SqlCeConnection("Data Source=|DataDirectory|\\App_Data\\Rosters.sdf");
System.Data.SqlServerCe.SqlCeCommand cmd = new SqlCeCommand();
cmd.Connection = conn;

cmd.CommandText = String.Format("Insert into Teams (LeagueID, TeamName, Color) values ({0},'{1}','{2}');SELECT @@IDENTITY;", leagueID, txtTeamName.Text.Replace("'", "''"), txtColor.Text.Replace("'", "''"));
conn.Open();
int teamID = (int)cmd.ExecuteScalar();
conn.Close();

问题是当我调用cmd.ExecuteScalar 时遇到异常。

异常消息读取,

{"解析查询时出错。[令牌行号= 1,令牌行偏移 = 97,错误令牌 = SELECT ]"}

我通过直接查询在完全相同的数据库中运行了完全相同的命令,并且运行良好 - 这让我认为问题不在于 SQL Server CE。

任何帮助将不胜感激。

【问题讨论】:

  • 谢谢马克。不幸的是,这不起作用。我得到了同样的结果。

标签: c# sql .net sql-server sql-server-ce


【解决方案1】:

SQL Server Compact 只支持每条命令一条语句,所以先用executenonquery 运行insert 语句,然后用executescalar 获取标识,中间切记不要关闭连接

【讨论】:

  • :-) 7 年后,still answering the same common question。别担心,我知道那种感觉。
  • @Joshua 你试过这个建议了吗?它奏效了吗?无论是 SQL Server Compact 还是 SqlCeConnection 不支持单个批处理中的多个语句,如果建议使您的代码正常工作,这真的很重要吗?
  • @Joshua 直接查询是什么意思?如果您的意思是 SSMS 或 Sql CeToolbox,那么这些工具会拆分每个语句并单独运行
猜你喜欢
  • 2023-03-23
  • 1970-01-01
  • 2019-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多