2012-01-27 49 views
2

我使用C#与TSQL和SQL Server 2005PetaPoco存储过程错误“语法错误‘从’关键字附近。”}

我试图用PetaPoco返回一个数据集作为对象的列表。这是我使用的代码刚才

var s = PetaPoco.Sql.Builder.Append("USE [BI] EXEC [dbo].[TestProcedure2];"); 
      var result = db.Query<dynamic>(s); 

var result2 = db.Query<dynamic>("USE [BI] EXEC [dbo].[TestProcedure2];"); 

我认为错误消息是当petaPoco失败通用SQL错误。

起初我使用存储过程与参数和@字符导致了一个问题,一旦用@@修复我开始得到这个错误,所以我做了一个简单的选择语句的存储过程。该过程在Management Studio中完全正常执行。

在选择语句中使用PetaPoco很好,数据完全正确地映射到动态或对象模型。我创建了一个垃圾SQL字符串,它返回了同样的错误,这是我从中获取通用错误想法的地方。

这是我使用的正常工作

var dynTest = 
       db.Query<dynamic>(
        "SELECT TOP 10 * FROM [BI].[dbo].[Managers] ORDER BY [ConsecutiveDays] desc"); 
+0

不熟悉PetaPoco,但是您确定该错误不是由尝试执行“USE BI EXEC Testprocedure”作为单个查询造成的吗? – 2012-01-27 12:50:04

+0

它在管理工作室工作,我已经改写了关于10种不同方式的查询,他们都在管理工作室工作,但在C#代码中失败。 BI数据库在使用PetaPoco时定义,但是EXEC [dbo]。[TestProcedure2]也失败 – 2012-01-27 15:24:15

+0

对不起。我想也许管理工作室很聪明,可以将这个陈述分成两个查询。如果那不是,我没有答案。 – 2012-01-27 15:35:54

回答

2

它试图追加在它前面的SELECT语句的选择。
如果你把一个“;”在查询开始时,它不会尝试追加它。

+0

修复它,谢谢。 – 2012-01-30 10:15:30

+0

您也可以使用EXECUTE而不是EXEC。 – Larry 2012-03-07 14:09:30

1

PetaPoco假定你想要执行一个SELECT,并且如果你不包含一个,就会推断出一个。 避免做自动选择,你应该使用:

db.EnableAutoSelect = false; 

在此之前您的查询。

相关问题