【问题标题】:Boolean in OracleDbType [duplicate]OracleDbType 中的布尔值
【发布时间】:2017-01-02 07:21:03
【问题描述】:

什么是 Oracle 等效的布尔值?我有这个功能,我需要将 onlineFiling 作为 bool 传递给存储过程,但显然 Oracle 在其 OracleDbType 中没有布尔值。我该怎么做呢?谢谢

public List<MModel> GetReportData(DateTime startDateTime, DateTime endDateTime, bool onlineFiling)
        {
            var managementModel = new List<ManagementModel>();
            var oracCmd = new OracCommand(1);
            oracCmd.AddInParameter(OracleDbType.Date, "I_STARTDATE", startDateTime));
            oracCmd.AddInParameter(OracleDbType.Date, "I_ENDDATE", endDateTime));
            oracCmd.AddInParameter(OracleDbType.???, "I_ONLINE", onlineFiling));
//rest of code here

【问题讨论】:

  • 您必须更改您的函数规范以接受字符或数字标志;或添加一个包装函数,将字符/数字转换为布尔值并调用您的原始函数。 There is no native type,即使你调用的是 PL/SQL 而不是 SQL

标签: c# oracle entity-framework stored-procedures


【解决方案1】:

查看Data Provider for .NET Developer's Guide 上的 Oracle 数据提供程序文档。 ODP 似乎不支持布尔值。

一种选择是使用CharNumber 1/0。

您还应该看看以下 SO 帖子:

"Boolean" parameter for Oracle stored procedure

How to pass boolean parameter to Oracle procedure C#

【讨论】:

    【解决方案2】:

    这取决于你调用的存储过程,但通常使用二进制类型的ORACLE参数。

    public List<MModel> GetReportData(DateTime startDateTime, DateTime endDateTime, bool onlineFiling)
    {
        var managementModel = new List<ManagementModel>();
    
        var oracCmd = new OracCommand(1);
        oracCmd.AddInParameter(OracleDbType.Date, "I_STARTDATE", startDateTime));
        oracCmd.AddInParameter(OracleDbType.Date, "I_ENDDATE", endDateTime));
        oracCmd.AddInParameter(OracleDbType.BinaryDouble, "I_ONLINE", onlineFiling));
    
        //rest of code here
    

    但您必须确定返回的是哪种类型,并将结果转换为正确的类型。

    【讨论】:

      猜你喜欢
      • 2011-04-13
      • 2017-04-08
      • 1970-01-01
      • 2013-11-04
      • 1970-01-01
      • 2019-03-08
      • 1970-01-01
      • 1970-01-01
      • 2018-01-24
      相关资源
      最近更新 更多