【问题标题】:Issues with Dapper query syntaxDapper 查询语法的问题
【发布时间】:2023-03-30 06:26:01
【问题描述】:

我使用 dapper 进行查询的帮助很少,在我的查询中收到错误消息 = "ORA-00936: missing expression\n"。我想知道我在这里缺少什么?

  public class LocationDto
        {
            public int LocationId { get; set; }
            public int RouteId { get; set; }
            public string StartTime { get; set; }
            public string Location { get; set; }
        }
// Query Below
    using (OracleConnection connection = new OracleConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString))
                {
     try {
                        var x = connection.QueryAsync<LocationDto>("Select ROUTE_ID as RouteId,  SCHEDULE_STOP as Location, START_TIME as StartTime From SCHEDULE WHERE ROUTE_ID = @Id", new { input.RouteId }).Result.ToList();
    
                    }
                    catch (Exception ex)
                    { 
                    
                    }
    }

【问题讨论】:

  • 尝试将 @Id 重命名为 @RouteId 看看会发生什么。
  • @ADyson,它只是拒绝两次尝试。

标签: c# sql .net oracle dapper


【解决方案1】:

首先对于 Oracle 查询,您需要使用 : 而不是 @ 来表示参数占位符。

然后是这段代码:

new { input.RouteId }

将生成一个具有名为RouteId 的属性的对象。

RouteId 与查询中的参数名称(Id)不匹配。它们需要匹配,否则数据库无法将参数绑定到正确的输入值。

你可以

  1. 更改 Sql 查询:

    WHERE ROUTE_ID = :RouteId
    

  1. 更改 C#:

    new { Id = input.RouteId }
    

并在 SQL 中使用 :Id

哪个并不重要,重要的是名称匹配。

【讨论】:

  • 不!!,可能是因为它的oracle查询还是无关紧要?
  • “Nop”到底是什么意思?您是否仍然遇到相同的错误,或不同的错误?描述问题时请务必具体,否则很难确定到底发生了什么或如何提供帮助。
  • Nop 表示不,我仍然遇到相同的错误,但问题已排序,必须使用:而不是 @。像这样 WHERE ROUTE_ID = :RouteId
  • 嗯,好的。是的,其他 Oracle Dapper 示例显示使用 :。但似乎并非全部,所以我不完全确定是否需要它(这些天我不使用 oracle)。无论如何我都会修改答案,因为听起来您需要我的更改以及:。然后,您将能够将其标记为已接受/赞成它作为一个完整的答案。
  • 是的,你可以修改
猜你喜欢
  • 2011-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多