Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用Oracle数据库的.Net核心API-如何选择返回类型并将OracleCommand结果转换为这些类型_C#_Oracle_Asp.net Core_Return Type - Fatal编程技术网

C# 使用Oracle数据库的.Net核心API-如何选择返回类型并将OracleCommand结果转换为这些类型

C# 使用Oracle数据库的.Net核心API-如何选择返回类型并将OracleCommand结果转换为这些类型,c#,oracle,asp.net-core,return-type,C#,Oracle,Asp.net Core,Return Type,我已经花了两天多的时间,但我还没有找到一些东西来清楚地解释如何使用oracle数据库在.NET Core中创建API,因为我发现关于这个主题的信息很少 我需要一些耐心,我是.NETCore的noob,oracle让我更难使用oracle数据库 我希望有人能指导我完成这个过程 我遵循了下一个教程: 我可以成功地创建API,问题是该API不能与oracle数据库一起工作,这是我无法更改的要求 到目前为止,我所做的是: 我创建了一个.NET核心项目并选择了API 我创建了一个Models文件夹并创建

我已经花了两天多的时间,但我还没有找到一些东西来清楚地解释如何使用oracle数据库在.NET Core中创建API,因为我发现关于这个主题的信息很少

我需要一些耐心,我是.NETCore的noob,oracle让我更难使用oracle数据库

我希望有人能指导我完成这个过程

我遵循了下一个教程:

我可以成功地创建API,问题是该API不能与oracle数据库一起工作,这是我无法更改的要求

到目前为止,我所做的是:

  • 我创建了一个.NET核心项目并选择了API
  • 我创建了一个Models文件夹并创建了Employee类
  • 添加了OracleManagedDataAccessCore Nuget包
  • 我创建了一个脚手架API控制器(空)
  • 我将api连接到oracle
  • 我的员工模型代码如下所示:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel.DataAnnotations;
    using System.Linq;
    using System.Threading.Tasks;
    
    namespace OracleAPI.Models
    {
        public class Employee
        {
            [Key]
            public int EMPLOYEE_ID { get; set; }
            [Required]
            public string FIRST_NAME { get; set; }
            [Required]
            public string LAST_NAME { get; set; }
            [Required]
            public string EMAIL { get; set; }
            [Required]
            public string PHONE_NUMBER { get; set; }
            [Required]
            public string HIRE_DATE { get; set; }
    
            public int JOB_ID{ get; set; }
    
            public double SALARY { get; set; }
    
            public double COMMISSION_PCT { get; set; }
    
            public int MANAGER_ID { get; set; }
            public int DEPARTMENT_ID { get; set; }
        }
    }
    
    我的API控制器如下所示:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Threading.Tasks;
    using Microsoft.AspNetCore.Http;
    using Microsoft.AspNetCore.Mvc;
    using OracleAPI.Models;
    using Oracle.ManagedDataAccess.Client;
    
    namespace OracleAPI
    {
        [Route("api/[controller]")]
        [ApiController]
        public class APIController : ControllerBase
        {
    
            public string conString = "User Id=HR;Password=HR;Data Source=localhost:1521/xe";
            public static Oracle.ManagedDataAccess.Client.OracleConnection con;
    
            public APIController()
            {
                con = new OracleConnection(conString);
            }
    
            //This is the part where Im stuck
            [HttpGet]
            public async Task<ActionResult<Employee>> GetEmployees()
            {
                using (con)
                {
                    try
                    {
                        using (OracleCommand cmd = new OracleCommand())
                        {
                            con.Open();
                            cmd.BindByName = true;
                            cmd.CommandText = "SELECT * FROM employees";
                            OracleDataReader reader = cmd.ExecuteReader();
    
                            while (reader.Read())
                            {
                                //await context.Response.WriteAsync("This part is obviously going to be removed but it's commented here to show why I chose this method to by an async task and this was in the example of the connection to the oracle database");
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        return null;
                    }
                }
            }
    
    
        }
    }
    
    使用系统;
    使用System.Collections.Generic;
    使用System.Linq;
    使用System.Threading.Tasks;
    使用Microsoft.AspNetCore.Http;
    使用Microsoft.AspNetCore.Mvc;
    使用OracleAPI.模型;
    使用Oracle.ManagedDataAccess.Client;
    名称空间Oraclepi
    {
    [路由(“api/[控制器]”)]
    [ApiController]
    公共类APIController:ControllerBase
    {
    public string conString=“User Id=HR;Password=HR;Data Source=localhost:1521/xe”;
    公共静态Oracle.ManagedDataAccess.Client.OracleConnection con;
    公共APIController()
    {
    con=新的OracleConnection(构造);
    }
    //这就是我被卡住的地方
    [HttpGet]
    公共异步任务GetEmployees()
    {
    使用(con)
    {
    尝试
    {
    使用(OracleCommand cmd=new OracleCommand())
    {
    con.Open();
    cmd.BindByName=true;
    cmd.CommandText=“从员工中选择*”;
    OracleDataReader=cmd.ExecuteReader();
    while(reader.Read())
    {
    //wait context.Response.WriteAsync(“这一部分显然将被删除,但此处对其进行了注释,以说明我为什么选择此方法来处理异步任务,这是连接到oracle数据库的示例”);
    }
    }
    }
    捕获(例外情况除外)
    {
    返回null;
    }
    }
    }
    }
    }
    
    当我必须选择返回类型时,问题基本上就出现了,我尝试使用JSONResult,但我没有成功地将我的阅读器结果转换为Json,也无法使用教程中使用的EntityFrameworkCore时使用的相同返回类型

    我希望您能引导我走正确的道路,不仅了解如何根据我执行的操作(创建、读取、更新、删除)(Post、Get、Put、Delete)选择正确的返回类型,还了解如何将OracleCommand结果转换为该返回类型

    注意:我使用Oracle database 18c Express Edition,创建API的目的是因为我需要使用Xamarin项目中的API,并且由于Oracle nuget不适用于iOS,因此我最好创建API


    非常感谢你的帮助。我将感谢任何人能提供的任何帮助

    您的调试器是否在(reader.Read())阶段到达
    ?请帮个忙并使用它。@LajosArpad是的。@Stefan谢谢,我现在就检查它。所以您有数据,但不知道如何转换它?