【问题标题】:ORA-00936: missing expression using Entity framework update statementORA-00936: 缺少使用实体框架更新语句的表达式
【发布时间】:2016-09-08 04:28:45
【问题描述】:

我是在实体框架 5 中使用 ORACLE 的新手。尝试一个不起作用的简单更新语句,我收到错误“ORA-00936:缺少表达式”

Entities context = new Entities();

var Description="UpdateTesting";
var Id = "1";

string UpdateSqlString = @"Update SOURCE Set DESCRIPTION={0} where SOURCEID={1}";

int RowsUpdated = context.Database.ExecuteSqlCommand(UpdateSqlString, Description, Id);

context.SaveChanges();

我也尝试了以下方法,但仍然遇到同样的错误

 Entities context = new Entities();

 var Description = "UpdateTesting";
 var Id = "1";

 var sql = @"Update SOURCE Set DESCRIPTION = @DESCRIPTION WHERE SOURCEID = @Id";

 int RowsUpdated = context.Database.ExecuteSqlCommand(sql, new OracleParameter("DESCRIPTION", Description),
                                                                  new OracleParameter("Id", Id));
 context.SaveChanges();

我现在尝试使用以下语法,但在 ExecuteSqlCommand 之后没有任何反应,并且应用程序可能进入了一些未结束的循环

var Description="UpdateTesting";
var SOURCEId = "1";

var sql = "Update SOURCE SET DESCRIPTION = :Description WHERE SOURCEID = :SOURCEId";

 int RowsUpdated=context.Database.ExecuteSqlCommand(
            sql,
            new OracleParameter(":Description", Description),
            new OracleParameter(":SOURCEId", SOURCEId));

如果这有助于解决这个问题,我可以提供 SQL 创建表脚本。

有什么想法吗?谢谢

【问题讨论】:

  • 呃。试过了,但现在出现这个错误“无法将'System.Data.SqlClient.SqlParameter'类型的对象转换为'Oracle.DataAccess.Client.OracleParameter'。”
  • 现在出现稍微不同的错误“无法将类型为 'System.Data.OracleClient.OracleParameter' 的对象转换为类型 'Oracle.DataAccess.Client.OracleParameter'”
  • 现在尝试使用此命名空间“使用 Oracle.DataAccess.Client;”但现在回到原来的错误“ORA-00936:缺少表达式”
  • 当然。请查看更新

标签: c# oracle entity-framework


【解决方案1】:

你试过吗?没有冒号

    var Description="UpdateTesting";
var SOURCEId = "1";

var sql = "Update SOURCE SET DESCRIPTION = :Description WHERE SOURCEID = :SOURCEId";

 int RowsUpdated=context.Database.ExecuteSqlCommand(
            sql,
            new OracleParameter("Description", Description),
            new OracleParameter("SOURCEId"   , SOURCEId));

【讨论】:

    【解决方案2】:

    不要使用{0},而是使用:0

    Entities context = new Entities();
    
    var Description="UpdateTesting";
    var Id = "1";
    
    string UpdateSqlString = @"Update SOURCE Set DESCRIPTION=:0 where SOURCEID=:1";
    
    int RowsUpdated = context.Database.ExecuteSqlCommand(UpdateSqlString, Description, Id);
    
    context.SaveChanges();
    

    【讨论】:

      【解决方案3】:

      我认为您必须为更新脚本添加 ' 符号,因为 SQL 无法将其识别为字符串,如下所示:

      Update SOURCE Set DESCRIPTION='{0}' where SOURCEID={1}
      

      尝试相应地编辑其他表达式。

      更新

      可能是,您的问题出在表名上(SOURCE 可能是保留关键字,不会被识别为表名)。尝试将其包装在"" 中,如下所示:

      Update "SOURCE" Set DESCRIPTION='{0}' where SOURCEID={1}
      

      【讨论】:

      • 感谢您的回答,但我在输入'后仍然遇到同样的错误
      • 我在 ORACLE 查询编辑器中尝试了以下 PL SQL,它可以工作Update SOURCE Set DESCRIPTION='SOme Updates Testing' where SOURCEID=1;
      • 在应用程序中,以下行确实带来了返回var Rows = context.SOURCEs.ToList();,因此连接或权限没有问题
      • @Learner 你试过" quatation吗?
      • 是的,我做到了,但这没有任何区别string UpdateSqlString = @"Update ""SOURCE"" Set DESCRIPTION={0} where SOURCEID={1}";
      猜你喜欢
      • 2021-11-22
      • 2013-02-15
      • 2017-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多